【问题标题】:webRequest listener doesn't see headers like 'cookie', 'referer', 'origin'webRequest 侦听器看不到“cookie”、“referer”、“origin”等标头
【发布时间】:2023-03-20 19:08:01
【问题描述】:

我们编写了一个 Chrome 扩展,它使用 onBeforeSendHeaders 事件为每个 Web 请求添加一个 cookie:

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};
    }
}

除了我自己的以外,它在每个人的 Chrome 上都能正常工作。在调试扩展时,我注意到details.requestHeaders 数组没有cookie 标头(这总是错误的:requestHeader.name.toLowerCase() === "cookie")。

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

在扩展程序的清单中,permissions 下有“cookies”和“webRequest”。

有什么想法吗?提前致谢!

【问题讨论】:

  • @wOxxOm 不是 Set-Cookie 响应头吗?我们正在尝试修改请求标头

标签: javascript cookies google-chrome-extension http-headers


【解决方案1】:

据此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"]

请注意,它不会在不知道 extraHeaders 的旧的 pre-72 Chrome 中运行,因此您可以使用以下技巧来拥有一个通用兼容的侦听器:

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

【讨论】:

    猜你喜欢
    • 2015-12-07
    • 2018-09-28
    • 1970-01-01
    • 2018-06-25
    • 2018-08-09
    • 2014-11-07
    • 2022-07-27
    • 2014-01-10
    • 1970-01-01
    相关资源
    最近更新 更多