Как отправить "origin" в качестве реферера для файла favicon.ico при нажатии на изображение?

У меня есть простой предварительный просмотр изображения, который при нажатии приводит вас к полноразмерному изображению:

<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,

Как установить заголовок Referer для запроса favicon.ico просто на источник? Я не хочу, чтобы полный URL отображался в моих журналах nginx. Спасибо!

1 ответ

Решение

Опция 1

Использовать referrerpolicy Атрибут HTML в теге ссылки - см. Документы по MDN.

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

Вариант 2

Использовать webRequest API для перезаписи заголовка 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"]
);
Другие вопросы по тегам