webRequest listener doesn't see headers like 'cookie', 'referer', 'origin'

Roy*_*llo 2 javascript cookies http-headers google-chrome-extension

We wrote a Chrome-extension that, using the onBeforeSendHeaders event, adds a cookie to each web request:

chrome.webRequest.onBeforeSendHeaders.addListener(addCookie, {
    urls: ["<all_urls>"]
}, ["blocking", "requestHeaders"]);

function addCookie(details) {
    if (details.url.match(/ourWebsite/)) {
        details.requestHeaders.forEach(function (requestHeader) {
            if (requestHeader.name.toLowerCase() === "cookie") {
                //Code that adds a cookie with a value
            }
        });
        return {requestHeaders: details.requestHeaders};
    }
}
Run Code Online (Sandbox Code Playgroud)

它适用于每个人的 Chrome,但我自己的。在调试扩展时,我注意到details.requestHeaders数组没有cookie标头(这总是假的:)requestHeader.name.toLowerCase() === "cookie"

我的第一个想法是另一个扩展程序搞砸了我们的,所以我尝试隐身(不允许其他扩展程序),但它没有用。

在扩展的清单中,我们在permissions.

有任何想法吗?提前致谢!

2hu*_*2hu 8

根据这个https://developer.chrome.com/extensions/webRequest

  • 从 Chrome 72 开始,不提供以下请求标头,如果不在 opt_extraInfoSpec 中指定 'extraHeaders',则无法修改或删除:

    • 接受语言
    • 接受编码
    • 推荐人
    • 曲奇饼
  • 从 Chrome 79 开始:

    • 起源
    • CORS 预检请求

其他侦听器的响应标头,如 onHeadersReceived:

  • 从 Chrome 72 开始:
    • 设置 Cookie
    • 在应用CORB之前要修改的任何标头
  • 从 Chrome 79 开始:
    • CORS 预检响应

因此,您应该将“extraHeaders”添加到 webRequest 侦听器的第三个参数中,它应该["blocking", "requestHeaders", "extraHeaders"]用于您的示例。

请注意,它不会在不知道 72 之前的旧版 Chrome 中运行extraHeaders,因此您可以使用以下技巧来获得通用兼容的侦听器:

chrome.webRequest.onBeforeSendHeaders.addListener(
  addCookie,
  {urls: ["<all_urls>"]},
  ["blocking", "requestHeaders",
   chrome.webRequest.OnBeforeSendHeadersOptions.EXTRA_HEADERS].filter(Boolean)
);
Run Code Online (Sandbox Code Playgroud)