作者:手机用户2502876273 | 来源:互联网 | 2023-01-28 01:58
1> Alex Griffis..:
在跟随您的测试用例之后,我能够以下列方式解决此问题(示例),但我不知道它适用于所有更一般的情况:
使用chrome.webRequest
拦截对扩展的请求的响应.
使用阻止形式onHeadersRecieved
去除包含的标题rel=preload
允许响应继续更新的标头.
我不得不承认我花了很多时间试图弄清楚为什么这似乎有效,因为我不认为剥离链接头应该适用于所有情况.我认为Server Push会在发送请求后才开始推送文件.
正如您在附加说明中所提到的,其中SETTINGS_ENABLE_PUSH
大部分内容实际上已经融入了Chrome并且隐藏在我们的视图中.如果你想深入挖掘,我发现了详细信息chrome://net-internals/#http2
.也许Chrome会杀死Server Push发送的文件,这些文件在初始响应中没有相应的链接头.
这个解决方案取决于chrome.webRequest
Docs
扩展程序的后台脚本:
let trackedUrl;
function foo(url) {
trackedUrl = url;
const optiOns= {};
options.credentials = 'omit';
options.method = 'get';
options.headers = { 'Accept': 'text/html' };
options.mode = 'cors';
options.cache = 'default';
options.redirect = 'follow';
options.referrer = 'no-referrer';
options.referrerPolicy = 'no-referrer';
return fetch(url, options)
}
chrome.webRequest.onHeadersReceived.addListener(function (details) {
let newHeaders;
if (details.url.indexOf(trackedUrl) > -1) {
newHeaders = details.responseHeaders.filter(header => {
return header.value.indexOf('rel=preload') <0;
})
}
return { responseHeaders: newHeaders };
}, { urls: [''] }, ['responseHeaders', 'blocking']);
扩展的清单:
{
"manifest_version": 2,
"name": "Example",
"description": "WebRequest Blocking",
"version": "1.0",
"browser_action": {
"default_icon": "icon.png"
},
"background": {
"scripts": [
"back.js"
]
},
"content_security_policy": "script-src 'self'; object-src 'self'",
"permissions": [
"",
"background",
"webRequest",
"webRequestBlocking"
]
}
补充说明:
我只是天真地将这个限制到扩展的最新请求网址,有 webRequest.requestFilters
烤到chrome.webRequest
你可以在这里查看
您可能还希望更加具体地了解您删除哪些标头.我觉得剥离所有的链接都会有一些额外的效果.
这避免了代理,并且不需要在请求中设置链接头.
这是一个非常强大的扩展,我个人避免使用权限扩展
,希望你可以缩小范围.
我没有测试阻止删除标头响应导致的延迟.