首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修改Chrome扩展中的响应头

修改Chrome扩展中的响应头
EN

Stack Overflow用户
提问于 2018-11-06 21:11:37
回答 2查看 2.7K关注 0票数 3

我正在尝试用我的Chrome扩展修改referer-policy头,但它不影响响应头。

Manifest.json:

代码语言:javascript
复制
{
  "name": "My Example Extension",
  "version": "1.0",
  "description": "",
  "permissions": [
    "webRequest",
    "webRequestBlocking",
    "*://*/*"
  ],
  "background": {
    "scripts": ["background.js"],
    "persistent": true
  },
  "manifest_version": 2
}

background.js:

代码语言:javascript
复制
chrome.webRequest.onHeadersReceived.addListener(details => {
    let header = details.responseHeaders.find(e => e.name.toLowerCase() === 'referrer-policy');

    // Check if the header has been defined already
    if (typeof header !== 'undefined') {
        console.log ('Modifying header');
        header.value = 'strict-origin';
    }
    else {
        details.responseHeaders.push({ name: 'referrer-policy', value: 'strict-origin' });
    }

    return {responseHeaders: details.responseHeaders};
}, {urls: ["*://*/*"]}, ['blocking', 'responseHeaders']);

我添加了调试输出,这些输出显示代码相应地修改或添加头,但对浏览器本身没有影响。

EN

回答 2

Stack Overflow用户

发布于 2019-12-12 10:29:35

当我试图修改扩展中的响应头时,我编写了完全相同的代码。

代码语言:javascript
复制
// manifest.json

  "permissions": [
    "webRequest", "webRequestBlocking", "https://developer.chrome.com/*"
  ]

// background.js

chrome.webRequest.onHeadersReceived.addListener(
  function(details) {
    const newHeader = {name:"foo", value:"bar"};
    const responseHeaders = details.responseHeaders.concat(newHeader);
    return { responseHeaders };
  },
  // filters
  {
    urls: ["https://developer.chrome.com/*"],
  },
  // extraInfoSpec
  ["blocking","responseHeaders"]
);

它根本就不起作用。

直到我将最后一个参数更改为:

代码语言:javascript
复制
  // extraInfoSpec
  ["blocking","responseHeaders", "extraHeaders"]

它终于起作用了。

通过重新阅读文档,在Life cycle of requests部分的最后几段中:

从Chrome79开始的

,...另一方面,响应头修改不会欺骗CORS检查。如果需要欺骗CORS协议,还需要为响应修改指定'extraHeaders‘。

票数 7
EN

Stack Overflow用户

发布于 2018-11-06 21:52:39

您没有返回修改后的标头。尝试使用:

代码语言:javascript
复制
chrome.webRequest.onHeadersReceived.addListener(details => {
    let myResponseHeaders = details.responseHeaders;
    let header = myResponseHeaders.find(e => e.name == 'Referrer-Policy');

    // Check if the header has been defined already
    if (header) {
        console.log ('Modifying header');
        let headerIndex = myResponseHeaders.indexOf(header);
        myResponseHeaders.splice(headerIndex,1);
    }

    myResponseHeaders.push({ name: 'Referrer-Policy', value: 'strict-origin' });


    return {responseHeaders: myResponseHeaders};
}, {urls: ["*://*/*"]}, ['blocking', 'responseHeaders']);

或者使用从documentation复制的略微修改的代码

代码语言:javascript
复制
chrome.webRequest.onHeadersReceived.addListener(
    function(details) {
      for (var i = 0; i < details.responseHeaders.length; ++i) {
        if (details.responseHeaders[i].name === 'Referrer-Policy') {
          details.responseHeaders[i].value = 'strict-origin';
          break;
        }
      }
      return {responseHeaders: details.responseHeaders};
    },
    {urls: ["<all_urls>"]},
    ["blocking", "responseHeaders"]);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53172613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档