You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Safari扩展declarativeNetRequest修改自定义Header失效问题

Safari 16.5.2中declarativeNetRequest自定义请求Header失效问题

问题背景

已在manifest中配置declarativeNetRequestWithHostAccess权限,调用await browser.declarativeNetRequest.updateDynamicRules({ addRules: x })添加修改请求Header的规则时,自定义Headerx-source被判定无效(规则ID 100不被识别),但将Header名称改为Origin则可正常运行。该规则在Chrome、Edge、Firefox等浏览器均能正常生效,仅Safari 16.5.2(18615.2.9.11.10)出现此问题。

规则代码示例:

var x = [
  {
    "id": 100,
    "priority": 1,
    "action": {
      "type": "modifyHeaders",
      "requestHeaders": [
        {"header": "x-source", "operation": "set", "value": "test"}
      ]
    },
    "condition": {"urlFilter": "https://*/*"}
  }
];

原因

Safari 16.x版本的declarativeNetRequestAPI存在Header名称支持限制:modifyHeaders动作仅允许修改标准HTTP请求Header,对自定义前缀(如x-*)的Header未提供支持,因此会判定这类Header名称无效。该限制在Safari 17及以上版本已被修复。

解决方案

方案1:使用webRequest API替代(兼容Safari 16.x)

放弃declarativeNetRequest,改用webRequestAPI手动修改请求Header,需在manifest中额外添加webRequest和webRequestBlocking权限:

browser.webRequest.onBeforeSendHeaders.addListener(
  (details) => {
    // 先移除已存在的x-source(若需覆盖原有值)
    details.requestHeaders = details.requestHeaders.filter(h => h.name.toLowerCase() !== 'x-source');
    details.requestHeaders.push({name: 'x-source', value: 'test'});
    return {requestHeaders: details.requestHeaders};
  },
  {urls: ['https://*/*']},
  ['blocking', 'requestHeaders']
);

方案2:升级Safari版本

引导用户升级至Safari 17或更高版本,即可直接使用原declarativeNetRequest规则设置自定义Header。

验证说明

  • 在Safari 17.1版本中测试原规则代码,x-sourceHeader可被成功设置,规则无报错。
  • 确保manifest中已正确声明对应主机权限(如"https://*/*")与declarativeNetRequestWithHostAccess权限。

内容的提问来源于stack exchange,提问作者surya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 14:10:10