1

我有一个简单的图像预览,单击它会带您进入全尺寸图像:

<html>
  <head>
    <meta name="referrer" content="origin">
  </head>
  <body>
    <a href="/myimage.jpg">
      <img src="/myimage.jpg" title="my image" border="0" />
    </a>
  </body>
</html>

问题:除了请求图片,浏览器还会请求favicon.ico。图像的请求标头是:(Referer: https://example.com/如预期的那样)。但是,对于 favicon.ico 文件的请求,此标头是引用页面的完整 url Referer: https://example.com/where-I-was:.

如何将 favicon.ico 请求的 Referer 标头设置为简单的来源?我不希望它在我的 nginx 日志中显示完整的 url。谢谢!

4

1 回答 1

1

选项1

在链接标签上使用referrerpolicyHTML 属性 -请参阅 MDN 上的文档

<a href="/myimage.jpg" referrerpolicy="origin">

选项 2

使用webRequestAPI 重写 Referer 标头 -请参阅此处的 MDN 页面。只需将标题设置为您想要的任何内容 - 似乎您可能对window.location对象感兴趣。

示例代码 - 从MDN 页面修改:

var targetURL = "http://example.com/favicon.ico";

var protocol = window.location.protocol;
var hostname = window.location.hostname;
var port = window.location.port;

var origin = protocol + '//' + hostname + (port ? ':' + port : '');

function rewriteUserAgentHeader(e) {
  e.requestHeaders.forEach(function(header){
    if (header.name.toLowerCase() == "referer") {
      header.value = origin;
    }
  });
  return {requestHeaders: e.requestHeaders};
}

browser.webRequest.onBeforeSendHeaders.addListener(
  rewriteUserAgentHeader,
  {urls: [targetURL]},
  ["blocking", "requestHeaders"]
);
于 2018-12-05T05:01:15.980 回答