Chrome强制升级Manifest V3后的又一个困扰:YApi请求自定义Uaer-Agent

forbidden headers

Chrome 出于安全策略,对某些敏感请求头(称为 forbidden headers),比如:

  • User-Agent
  • Referer
  • Origin
  • Host

这些请求头无法通过 JavaScript(比如 fetch 或 XMLHttpRequest)直接修改,即使是在扩展里。

webRequestBlocking

Manifest V2 支持 webRequest.onBeforeSendHeaders 来拦截请求,搭配 webRequestBlocking 权限,可以做到修改 User-Agent,但是这些在 Manifest V3里都不再被支持。

根据 fetch 规范中的禁止修改的标头列表(Firefox 43 中实现了它),User-Agent 标头不再被禁止,现在可以设置在 Fetch 的 Headers 对象中,或者通过 XMLHttpRequest 的 setRequestHeader() 方法设置。但是,Chrome 会静默地从 Fetch 请求中丢弃这个标头(请参阅 Chromium bug 571722)。

YApi

YApi 调试需要借助浏览器扩展才能在网页上实时发送请求,Manifest V3的调整,会导致YApi无法再发送自定义的 User-Agent,对于这个功能的依赖,目前无解。

可能的解决方案

  • 配合 ExtensionManifestV2Availability 临时开启继续用旧扩展,但是有时效性
  • 更换 Firefox 浏览器,但是YApi扩展的支持是个问题
  • 通过自定义参数发送 User-Agent 到服务端然后代理或特殊处理,比如我的修改版增加了 X-YApi-User-Agent 这个头

参考文档

YApi Chrome Manifest V3 规范的扩展
Fetch规范
禁止修改的请求标头
Manifest V2 支持时间表

标签: chrome, yapi, 扩展, manifest

添加新评论