Firefox fetch API: 如何在请求中省略 "origin" header?
Firefox fetch API: How to omit the "origin" header in the request?
如果您在 Firefox WebExtension 中发出获取请求,它会自动设置 "origin" header。例如,当我 运行 WebExtensions 中的这段代码时...
fetch('http://example.com/')
...生成的请求包含 header:
"origin: moz-extension://539a0d5b-60d9-4726-b3de-27d6979edc26"
运行 同样的代码在 Chromium 中不会设置 header。 (更新: 这并不总是正确的,因为 Chrome 也可能添加 header:"origin: chrome-extension://..."。)
是否可以选择在没有 "origin" 的情况下发送请求?
我没有在提取中找到选项 API。所以,到目前为止,我看到的唯一解决方案是使用 webRequest API 删除 header,但这似乎过于复杂。
当 WebExtension 使用提取 API 发送请求时,Firefox 和 Chrome 都会自动填充 origin
header。目前没有 API 选项来阻止它。
如果您不希望出现这种行为,您有两个选择:
- 使用旧的 XMLHttpRequest API 而不是 fetch
- 使用 webRequest API
手动删除 origin
header
选项 1 可行,因为 origin
header 仅由提取 API 设置。对于选项 2,您必须安装 onBeforeSendHeaders
处理程序以在请求离开浏览器之前删除 header:
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
中的权限。
如果您在 Firefox WebExtension 中发出获取请求,它会自动设置 "origin" header。例如,当我 运行 WebExtensions 中的这段代码时...
fetch('http://example.com/')
...生成的请求包含 header: "origin: moz-extension://539a0d5b-60d9-4726-b3de-27d6979edc26"
运行 同样的代码在 Chromium 中不会设置 header。 (更新: 这并不总是正确的,因为 Chrome 也可能添加 header:"origin: chrome-extension://..."。)
是否可以选择在没有 "origin" 的情况下发送请求?
我没有在提取中找到选项 API。所以,到目前为止,我看到的唯一解决方案是使用 webRequest API 删除 header,但这似乎过于复杂。
当 WebExtension 使用提取 API 发送请求时,Firefox 和 Chrome 都会自动填充 origin
header。目前没有 API 选项来阻止它。
如果您不希望出现这种行为,您有两个选择:
- 使用旧的 XMLHttpRequest API 而不是 fetch
- 使用 webRequest API 手动删除
origin
header
选项 1 可行,因为 origin
header 仅由提取 API 设置。对于选项 2,您必须安装 onBeforeSendHeaders
处理程序以在请求离开浏览器之前删除 header:
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
中的权限。