HarmonyOS鸿蒙Next中Web发起的请求,requestheader中sec-ch-ua-platform为何为Unknown

HarmonyOS鸿蒙Next中Web发起的请求,requestheader中sec-ch-ua-platform为何为Unknown 【问题描述】:ArkWeb加载网页,比如www.baidu.com,同样的请求,requestheaders中的sec-ch-ua-platform,在PC浏览器上显示为"Windows",在ArkWeb中显示为unknown

【设备信息】Mate60pro,API17

【诉求】确认显示为Unknown是否合理

5 回复

sec-ch-ua-platform 是 User-Agent Client Hints 特性的一部分,当前规格没有做要求。

User-Agent Client Hints 相关字段,后续会和Chromium同步。

【解决方案】

一、 目前使用User-Agent判断系统,默认User-Agent定义:

Mozilla/5.0 ({DeviceType}; {OSName} {OSVersion}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{ChromeCompatibleVersion}.0.0.0 Safari/537.36  ArkWeb/{ArkWeb VersionCode} {DeviceCompat} {扩展区}

举例说明:

Mozilla/5.0 (Phone; OpenHarmony 5.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36  ArkWeb/4.1.6.1 Mobile

可以使用ArkWeb关键字和OpenHarmony关键字识别是否是HarmonyOS设备。

二、如果是网页开发者,可以根据设备端传递的设备信息对网页做相应的适配,以适配多种设备以及设备型号。

  1. 通过设置UserAgent,把设备端标识信息传递给网页,网页端可以通过deviceType识别设备类型。
aboutToAppear(): void {
      webview.once('webInited', () => {
        try {
          // 应用侧用法示例,定制UserAgent。
          this.ua = this.controller.getUserAgent() + 
          'Mozilla/5.0 ({deviceType}; {OSName} {OSVersion}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 ArkWeb/{ArkWeb VersionCode} {Mobile}';
          this.controller.setCustomUserAgent(this.ua);
        } catch (error) {
          console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
        }
      })
 }
  1. 网页侧通过userAgent,获得设备端标识信息,代码示例如下:
<script>
  window.onload = function() {
    const resultText = document.getElementById("result");
    // 获得userAgent
    resultText.innerHTML = navigator.userAgent;  
  }
</script>
  1. 在Web的onControllerAttached里面设置UserAgent。
@State userAgent:string = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 ArkWeb/4.1.6.1 Mobile automobile/792 HuaweiBrowser'
Web({ src: '', controller: this.controller})
  .onControllerAttached(()=>{
    this.controller.setCustomUserAgent(this.userAgent);
    this.controller.loadUrl('xxxxxx')
})

更多关于HarmonyOS鸿蒙Next中Web发起的请求,requestheader中sec-ch-ua-platform为何为Unknown的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我看了下arkweb的请求头好像是没有sec-ch-ua,sec-ch-ua-platform,sec-ch-ua-Mobile等这几个字段的,所以是unknown

这些请求头都是有的,你再确认下,

在HarmonyOS鸿蒙Next中,Web请求的sec-ch-ua-platform标头值为"Unknown",是因为鸿蒙系统未在Chromium的User-Agent客户端提示标准预定义平台列表中注册。该标头用于向服务器传递客户端操作系统信息,鸿蒙作为独立系统,尚未被主流浏览器内核默认识别为已知平台,导致返回此默认值。这属于平台标识机制问题,不影响实际网络请求功能。

在HarmonyOS Next的ArkWeb中,sec-ch-ua-platform 请求头显示为 "Unknown" 是符合当前设计预期的行为。该请求头属于User-Agent Client Hints的一部分,用于向服务器传递客户端平台信息。由于ArkWeb基于系统级Web引擎实现,其默认行为未主动填充特定平台标识(如"Windows"或"Android"),而是统一返回 "Unknown" 以遵循隐私最小化原则。

这一设计符合HarmonyOS的隐私安全规范,避免向服务器过度暴露设备信息。若业务场景需传递平台标识,建议通过ArkWeb的配置接口自定义请求头,或依赖服务端通过其他标准字段(如User-Agent)进行平台识别。当前行为无需修复,属于正常机制。

回到顶部