Chrome扩展中使用declarative_net_request无法修改WebSocket请求头
问题描述
在Chrome扩展中尝试修改WebSocket创建过程中的Origin请求头,已在权限中添加declarativeNetRequestWithHostAccess,使用modifyHeaders类型规则后,fetch()调用的请求头修改完全生效,但WebSocket的请求头修改无效。
规则文件 src/rules/example.json
[ { "id": 2, "priority": 1, "action": { "type": "modifyHeaders", "requestHeaders": [ { "header": "origin", "operation": "set", "value": "https://www.example.ai" }, { "header": "referer", "operation": "set", "value": "https://www.example.ai" } ] }, "condition": { "urlFilter": "example", "isUrlFilterCaseSensitive": false, "resourceTypes": ["xmlhttprequest", "websocket"] } } ]
manifest.json 相关配置
... "declarative_net_request": { "rule_resources": [ { "id": "ruleset_example", "enabled": true, "path": "src/rules/example.json" } ] },
解决办法
WebSocket的Origin头属于Chrome的受保护请求头,默认无法通过普通modifyHeaders规则修改,需补充以下配置:
补充权限配置
在manifest.json的permissions数组中,添加declarativeNetRequest权限,并确保主机权限覆盖目标WebSocket的域名:"permissions": [ "declarativeNetRequest", "declarativeNetRequestWithHostAccess", "*://*.example.com/*" // 替换为你的目标WebSocket域名 ]修改规则的请求头配置
给Origin头的修改项添加modifiesRequestHeader字段,明确声明允许修改受保护的Origin头,同时可提高规则优先级避免被其他规则覆盖:[ { "id": 2, "priority": 10, "action": { "type": "modifyHeaders", "requestHeaders": [ { "header": "origin", "operation": "set", "value": "https://www.example.ai", "modifiesRequestHeader": "origin" // 新增此行 }, { "header": "referer", "operation": "set", "value": "https://www.example.ai" } ] }, "condition": { "urlFilter": "example", "isUrlFilterCaseSensitive": false, "resourceTypes": ["xmlhttprequest", "websocket"] } } ]版本检查
modifiesRequestHeader参数要求Chrome 116及以上版本,若当前浏览器版本过低需升级。
内容的提问来源于stack exchange,提问作者ishandutta2007
相关产品推荐
相关产品推荐

