不发送onBeforeSendHeaders中更改的标题

时间:2019-03-15 21:45:21

标签: ajax google-chrome-extension http-headers

这与Chrome 72+有关(解决https://www.chromium.org/Home/chromium-security/extension-content-script-fetches引入的更新)

在chrome扩展程序的后台脚本中,我需要设置Referer标头。那就是我使用的代码:

[<div class="parent">
<p class="example"> TRUE </p>
</div>, <div class="parent">
<p class="example"> TRUE </p>
</div>]

当我在返回之前输出var extraInfoSpec = ['blocking', 'requestHeaders']; if (chrome.webRequest.OnBeforeSendHeadersOptions.hasOwnProperty('EXTRA_HEADERS')) extraInfoSpec.push('extraHeaders'); chrome.webRequest.onBeforeSendHeaders.addListener(function(details){ var newRef = "http://referer.url/page"; var gotRef = false; for(var n in details.requestHeaders){ gotRef = details.requestHeaders[n].name.toLowerCase()=="referer"; if(gotRef){ details.requestHeaders[n].value = newRef; break; } } if(!gotRef){ details.requestHeaders.push({name:"Referer",value:newRef}); } return {requestHeaders:details.requestHeaders}; },{ urls:["my_test_path_url"] }, extraInfoSpec); 的内容时-它向我显示了包含details.requestHeaders的标头数组。

后来在Referer中,我像这样对background.js进行了ajax调用:

my_test_path_url

然后,我看一下网络控制台-并没有发现$.ajax({ type: "GET", headers: {"Authorization": `Bearer ${secretToken}`}, url: requestURL, dataType: 'json', success: ... 都没有添加到请求中。

要仔细检查,我为extraHeaders添加了一个侦听器(尝试了各种配置以获取额外的参数),但从未观察到onSendHeaders标头在Referer中指定。

问题是-如何确保在请求中传递requestHeaders?并可能如何在Referer中确认onSendHeaders仍完好无损?

-

请求标头,如Referer中所示: enter image description here

请求标头,如网络检查器中所示: enter image description here

1 个答案:

答案 0 :(得分:0)

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

  • 接受语言
  • 接受编码
  • 推荐人
  • 饼干

因此,您可以使用:

var extraInfoSpec = ['blocking', 'requestHeaders', 'extraHeaders'];