如果您在Firefox WebExtension中进行获取请求,它将自动设置“origin”标头.例如,当我在WebExtensions中运行此代码时……
fetch('http://example.com/')
…生成的请求包含标题:
“origin:moz-extension:// 539a0d5b-60d9-4726-b3de-27d6979edc26”
在Chromium中运行相同的代码不会设置标头. (更新:这并非总是如此,因为Chrome也可能会添加标题:“origin:chrome-extension:// …”.)
有没有“原产地”发送请求的选项?
我没有在fetch API中找到一个选项.所以,我看到的唯一解决方案是使用webRequest API删除标题,但这似乎过于复杂.
最佳答案 当WebExtension使用fetch API发送请求时,Firefox和Chrome都会自动填充原始标头.目前没有API选项来阻止它.
如果您不想要这种行为,您有两种选择:
>使用旧的XMLHttpRequest API而不是fetch
>使用webRequest API手动剥离原始标题
选项1将起作用,因为原始标头仅由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中的权限.