http - Firefox 获取 API : How to omit the "origin" header in the request?

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

如果您在 Firefox WebExtension 中发出获取请求,它会自动设置“origin” header 。例如,当我在 WebExtensions 中运行此代码时...

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

...生成的请求包含 header : “来源:moz-extension://539a0d5b-60d9-4726-b3de-27d6979edc26”

在 Chromium 中运行相同的代码将不会设置 header 。 (更新:这并不总是正确的,因为 Chrome 也可能添加 header :“origin: chrome-extension://...”。)

是否可以选择发送没有“来源”的请求?


我没有在获取 API 中找到选项。所以,到目前为止,我看到的唯一解决方案是使用 webRequest API 删除标题,但这似乎过于复杂。

最佳答案

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

如果您不希望出现这种行为,您有两种选择:

  1. 使用旧的 XMLHttpRequest API而不是获取
  2. 使用 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 中的权限。

关于http - Firefox 获取 API : How to omit the "origin" header in the request?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47356375/

相关文章:

javascript - 为什么在我的 Angular 2 应用程序中发送的是 OPTIONS 请求而不是 PUT?

javascript - CORS 错误 : “requests are only supported for protocol schemes: http…” etc

ios - 通过 JSON API Objective-C 发送 POST 请求

firefox - Dart polymer : Creating PaperDialog with CoreAnimatedPages displayed incorrectly in Firefox

javascript - 有谁知道如何使用新的 Firefox 15 Javascript 调试器

css - 无法摆脱 Firefox 链接中的虚线轮廓?

google-chrome - Chrome 扩展 *后台* 对 XMLHttpRequest 的脚本访问已被 CORS 策略阻止

java - 如何在 Dropwizard( Jersey )中记录 JSON 响应

ruby - 在 Sinatra 中处理分块请求

c# - 从 aspx 网页读取 xml