Firefox fetch API:如何省略" origin"请求中的标头?

时间:2017-11-17 17:39:01

标签: http firefox cors firefox-webextensions fetch-api

如果您在Firefox WebExtension中进行获取请求,它将自动设置"来源"头。例如,当我在WebExtensions中运行此代码时......

fetch('http://example.com/')

...生成的请求包含标题: "来源:moz-extension:// 539a0d5b-60d9-4726-b3de-27d6979edc26"

在Chromium中运行相同的代码不会设置标头。 (更新:这并非总是如此,因为Chrome也可能会添加标题:"来源:chrome-extension://..."。)

是否有选项可以在没有"来源"

的情况下发送请求

我在fetch API中找不到选项。所以,我看到的唯一解决方案是使用webRequest API删除标题,但这看起来过于复杂。

1 个答案:

答案 0 :(得分:1)

当WebExtension使用fetch API发送请求时,Firefox和Chrome都会自动填充origin标头。目前没有API选项来阻止它。

如果您不想要这种行为,您有两种选择:

  1. 使用旧的XMLHttpRequest API代替fetch
  2. 使用webRequest API
  3. 手动剥离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中的权限。