HarmonyOS6.0/Android/iOS Chromium内核升级,导致跨域请求不带cookie问题

42 阅读2分钟

最近手机系统升级HarmonyOS6.0后,导致原来的一个内置H5业务报错。经过排查发现是请求时没有带cookie导致。经过查看系统升级日志发现HarmonyOS6.0升级了Chromium内核。

HUAWEI cke_4451.png

 HarmonyOS 5.0搭载的是Chromium 114内核,而我们在HarmonyOS 6.0环境中发现H5页面突然出现跨域请求不携带Cookie的问题。最初,我们排查了Chromium 114到132版本的更新日志,未发现与该问题相关的改动记录。 经过半天排查仍未找到有效线索后,我们决定通过复现Demo向华为提交工单请求协助。但奇怪的是,无论是在HarmonyOS 6.0还是5.0环境中,Demo都能正常工作。为排除变量干扰,我们将Demo的目录结构调整得与项目完全一致,甚至直接在项目环境中打开该Demo,结果依旧能正常携带Cookie,问题始终无法复现。 随后,我们全面检查了HarmonyOS 中所有与跨域相关的配置是否有更新,包括:

  1. 为Cookie添加"; SameSite=None; Secure"参数、 
  2. 通过webview.WebCookieManager开启acceptCookie和acceptThirdPartyCookie、
  3.  配置webViewController的setPathAllowingUniversalAccess, 

但所有尝试均未解决问题。 此时,排查陷入僵局:一方面,项目在HarmonyOS 5.0及Android、iOS端均正常运行,初步判断H5自身问题的可能性较低,更倾向于HarmonyOS 6.0存在兼容性bug;但另一方面,由于Demo无法复现问题,华为技术人员也难以进一步排查。 转机出现在同事注意到H5的网络请求框架近期有过变动。我们尝试使用框架变动前的H5包进行测试,结果一切恢复正常。顺着这条线索,H5业务团队最终定位到问题根源:新更换的axios请求未设置withCredentials参数,导致跨域请求无法携带Cookie。 更值得注意的是,这一现象与Chromium内核版本相关:在旧版本内核中,即便未设置withCredentials,跨域请求仍能正常携带Cookie;而新内核可能收紧了安全策略,严格要求显式设置该参数才允许跨域携带Cookie,这也解释了为何问题仅在HarmonyOS 6.0(搭载新版本内核)中暴露。 

 同理,若Android或iOS项目中的H5页面突然出现Cookie无法携带的问题,不妨检查H5项目是否未正确设置withCredentials。这类潜在问题,很可能会随着Chromium内核版本的升级而被触发并暴露出来。