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

如何在Chrome扩展MV3中拦截含特定HTTP头的请求?

在Chrome扩展Manifest V3中用declarativeNetRequest拦截含特定HTTP头的请求

要实现拦截Accept-Encoding头包含zip的请求,你可以通过以下步骤配置Chrome扩展MV3的declarativeNetRequest API:

1. 配置Manifest文件

首先在manifest.json中声明必要的权限和规则引用:

{
  "manifest_version": 3,
  "name": "Header-Based Request Blocker",
  "version": "1.0",
  "permissions": ["declarativeNetRequest"],
  "host_permissions": ["<all_urls>"], // 替换为你需要拦截的特定域名,如"https://example.com/*"
  "declarative_net_request": {
    "rule_resources": [
      {
        "id": "block_zip_encoding",
        "enabled": true,
        "path": "rules.json"
      }
    ]
  }
}
  • declarativeNetRequest:必须声明的权限,用于使用声明式网络请求规则
  • host_permissions:指定要拦截的请求域名范围,<all_urls>表示所有域名,按需缩小范围
  • declarative_net_request.rule_resources:引用外部规则文件,也可以直接在manifest内定义规则(见下文可选方案)

2. 编写拦截规则

创建rules.json文件,定义匹配条件和拦截动作:

[
  {
    "id": 1,
    "priority": 1,
    "condition": {
      "requestHeaders": [
        {
          "header": "Accept-Encoding",
          "operator": "contains",
          "value": "zip",
          "ignoreCase": true // 可选,忽略大小写匹配
        }
      ],
      "resourceTypes": ["main_frame", "sub_frame", "script", "stylesheet", "image", "font", "object", "xmlhttprequest", "ping", "csp_report", "media", "websocket", "other"] // 按需指定要拦截的资源类型
    },
    "action": {
      "type": "block"
    }
  }
]

关键字段说明:

  • condition.requestHeaders:配置请求头匹配规则
    • header:目标请求头名称(区分大小写,除非设置ignoreCase)
    • operator:匹配逻辑,这里用contains表示头值包含指定字符串;其他可选值如equals(完全匹配)、startsWith(前缀匹配)等
    • value:要匹配的目标字符串(这里是zip)
  • action.type:设置为block即可拦截符合条件的请求,也可以选择redirect、modifyHeaders等其他动作
  • priority:规则优先级,数值越高越先执行(当存在多个规则时生效)

可选:直接在Manifest内定义规则

如果不想用外部规则文件,也可以直接在manifest.json的declarative_net_request中写规则:

"declarative_net_request": {
  "rules": [
    {
      "id": 1,
      "priority": 1,
      "condition": {
        "requestHeaders": [{"header": "Accept-Encoding", "operator": "contains", "value": "zip"}],
        "resourceTypes": ["all"]
      },
      "action": {"type": "block"}
    }
  ]
}

测试验证

  1. 在Chrome浏览器中打开chrome://extensions/,启用开发者模式,加载已解压的扩展
  2. 使用开发者工具的网络面板,或者用curl模拟请求:
    curl -H "Accept-Encoding: gzip, zip" https://example.com
    
  3. 查看扩展的规则状态:打开chrome://extensions/ -> 你的扩展 -> 详情 -> 查看规则,确认规则已启用

注意事项

  • 确保host_permissions覆盖了你要拦截的请求域名,否则规则不会生效
  • 如果需要匹配多个请求头,可以在requestHeaders数组中添加多个规则项
  • ignoreCase参数默认是false,如果需要不区分大小写匹配,记得显式设置为true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:31:03