Chrome Downloads API请求未被Declarative Net Request API修改的解决咨询
问题分析与解决方案
核心问题
使用Chrome扩展的Declarative Net Request API修改请求头时,通过chrome.downloads.download()发起的下载请求未被规则匹配,导致请求头未修改而下载失败;但通过DOM创建a标签触发的下载请求能正常被规则处理。
原因
Chrome的Downloads API发起的请求属于**download资源类型**,而你当前的静态规则中resourceTypes仅包含xmlhttprequest、main_frame、other,未覆盖download类型,因此规则不会对该类请求生效。
变通方案
方案1:扩展规则的资源类型范围
直接修改staticruleset.json中的resourceTypes,添加download类型,让规则匹配Downloads API发起的请求:
{ "id": 6413, "priority": 3, "action": { "type": "modifyHeaders", "requestHeaders": [ { "header": "Origin", "operation": "remove" }, {"header": "Sec-Fetch-Site", "operation": "set", "value": "same-origin" }, { "header": "Sec-Fetch-Mode", "operation": "set", "value": "navigate" }, { "header": "Sec-Fetch-Dest", "operation": "set", "value": "document" }, { "header": "Sec-Fetch-User", "operation": "set", "value": "?1" } ] }, "condition": { "urlFilter": "example.com/downloads/", "resourceTypes": ["xmlhttprequest", "main_frame", "other", "download"] } }
方案2:新增单独针对Downloads API的规则
如果不想让原规则覆盖过多资源类型,可以新增一条优先级相同或更高的规则,专门匹配download类型:
{ "id": 6414, "priority": 3, "action": { "type": "modifyHeaders", "requestHeaders": [ { "header": "Origin", "operation": "remove" }, {"header": "Sec-Fetch-Site", "operation": "set", "value": "same-origin" }, { "header": "Sec-Fetch-Mode", "operation": "set", "value": "navigate" }, { "header": "Sec-Fetch-Dest", "operation": "set", "value": "document" }, { "header": "Sec-Fetch-User", "operation": "set", "value": "?1" } ] }, "condition": { "urlFilter": "example.com/downloads/", "resourceTypes": ["download"] } }
验证步骤
- 修改规则后,重新加载Chrome扩展(在
chrome://extensions/页面点击刷新按钮) - 使用
chrome://net-export再次捕获请求日志,确认Downloads API发起的请求已被规则修改请求头 - 测试下载功能,确认请求符合服务器要求并成功下载
内容的提问来源于stack exchange,提问作者user23341070
相关产品推荐
相关产品推荐

