http – Firefox fetch API:如何在请求中省略“origin”标头?

如果您在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中的权限.

点赞