如果您在Firefox WebExtension中进行获取请求,它将自动设置"来源"头。例如,当我在WebExtensions中运行此代码时......
fetch('http://example.com/')
...生成的请求包含标题: "来源:moz-extension:// 539a0d5b-60d9-4726-b3de-27d6979edc26"
在Chromium中运行相同的代码不会设置标头。 (更新:这并非总是如此,因为Chrome也可能会添加标题:"来源:chrome-extension://..."。)
是否有选项可以在没有"来源"
的情况下发送请求我在fetch API中找不到选项。所以,我看到的唯一解决方案是使用webRequest API删除标题,但这看起来过于复杂。
答案 0 :(得分:1)
当WebExtension使用fetch API发送请求时,Firefox和Chrome都会自动填充origin
标头。目前没有API选项来阻止它。
如果您不想要这种行为,您有两种选择:
origin
标题
醇>
选项1将起作用,因为origin
标头仅由fetch API设置。对于选项2,您必须安装onBeforeSendHeaders
处理程序才能在请求离开浏览器之前删除标头:
function originWithId(header) {
return header.name.toLowerCase() === 'origin' &&
(header.value.indexOf('moz-extension://') === 0 ||
header.value.indexOf('chrome-extension://') === 0);
}
chrome.webRequest.onBeforeSendHeaders.addListener(
(details) => {
return {
requestHeaders: details.requestHeaders.filter(x => !originWithId(x))
}
},
{urls: ["<all_urls>"]},
["blocking", "requestHeaders"]
);
要使用该API,您需要将"webRequest"
和"webRequestBlocking"
添加到manifest.json
中的权限。