开发chrome extension时如何获取到请求的Host信息并增加Authorization字段

发布于 2022-08-31 20:30:48 字数 1267 浏览 14 评论 0

已经在manifest.json申请了webRequestwebRequestBlocking两个权限
拦截请求尝试读请求头部的Host信息代码如下

chrome.webRequest.onBeforeSendHeaders.addListener(function(details) {
  var headers = details.requestHeaders;
  for(var i = 0, l = headers.length; i < l; ++i) {
    if( headers[i].name == 'Host' && console.log(headers[i].name) && headers[i].value == '10.201.76.233:8080' ) {
      // something
      break;
    }
  }

  return {requestHeaders: headers};
}, requestFilter, ['requestHeaders','blocking']);

但是details.requestHeaders并没有包含Host的信息。
请教各位,如何才能获取到每次请求的Host信息?
或是如何确定本次的请求的Host10.201.76.231:8080

===update===
使用公子的方法解决了上面的问题了,但还存在后续问题

  chrome.webRequest.onBeforeRequest.addListener(
    var headers = details.requestHeaders;  
    headers.push({
      name: 'Authorization',
      value: 'Bearer3988275f-34fe-4e95-8452-506741adf184'
    });  
  return {requestHeaders: headers};
      ["http://10.201.76.231:8080/*"], 
      ['blocking', 'requestHeaders']
  );

目的是增加Authorization信息,代码并没有报错,但是最终结果并没有把Authorization信息加上去。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

很糊涂小朋友 2022-09-07 20:30:48

https://developer.chrome.com/extensions/webRequest ,文档中明确指出了以下头信息不会被传递进来:

  • Authorization
  • Cache-Control
  • Connection
  • Content-Length
  • Host
  • If-Modified-Since
  • If-None-Match
  • If-Range
  • Partial-Data
  • Pragma
  • Proxy-Authorization
  • Proxy-Connection
  • Transfer-Encoding

如果是想要限制请求的 host 的话可以使用 onBeforeSendHeaders 的第二个参数 filter

  chrome.webRequest.onBeforeRequest.addListener(
      callback, 
      ["http://10.201.76.231:8080/*"], 
      ['blocking', 'requestHeaders']
  );
若有似无的小暗淡 2022-09-07 20:30:48

我自己来回答问题的第一部分,关键在于chrome.webRequest.onBeforeRequest.addListener的回调函数中如何判别是否Host,是否一定要和Host比较,这里我用的是Request URL信息,Request URL并不是Request Header的内容,当时两者有关联,如:
Request URL: http://10.201.76.233:8080/app-manage/api/...
Host: 10.201.76.233:8080

因此我的回调函数大概是这样子的:

chrome.webRequest.onBeforeSendHeaders.addListener(function(details) {
  if(details.url.indexOf("10.201.76.233") != -1) {
    // do something
  }

}, requestFilter, ['requestHeaders','blocking']);

如果你要为多个host增加Authorization的请求头信息,那么你可以将多个host存储起来,然后在回调函数判别,例如:

// 1. 利用正则表达式将details.url截取剩下 10.201.76.233:8080的格式
// 2. 取出多个host组成的数组或其他结构
// 3. hostList.indexOf(newUrl) != -1;如果成立就为本次请求增加Authorization头信息

问题的第二部分也解决了,虽然官方提到修改Authorization头部信息是不被支持的,参照这里
我做的修改是在manifest.json加入了<all_urls>的权限。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文