Каким будет HTTP-реферер?

Каким будет реферер HTTP в следующих случаях:

  1. Пользователь щелкает ссылку на веб-сайте и попадает на другой веб-сайт, на котором есть горячая ссылка на изображение с третьего веб-сайта, каким будет реферер на изображении.
  2. Пользователь щелкает ссылку, ведущую на другой веб-сайт, который использует META Refresh для отправки обратно на первый веб-сайт.
  3. Пользователь щелкает ссылку, ведущую на другой веб-сайт, содержащий iframe, на вторую страницу второго сайта. Является ли реферер исходным сайтом или вторым сайтом?

Кажется, я не могу найти ответ. Если я не могу получить ответ здесь, я просто сделаю страницы и протестирую их.


person Hintswen    schedule 05.10.2009    source источник
comment
Обратите внимание, что реферер страницы может (будет) отличаться от реферера изображений, встроенных в эту страницу.   -  person Arjan    schedule 09.10.2009


Ответы (5)


Referer всегда является документом/ресурсом, который ссылается на текущий ресурс. Так:

  1. URL-адрес документа, на который ссылается изображение.
  2. В отличие от переадресации HTTP, обновление META вызывает браузер для отправки URL-адреса документа, в котором находится обновление META.
  3. Как и в случае с изображением, Referer будет URL-адресом документа, содержащего фрейм.
person Gumbo    schedule 09.10.2009
comment
Интересно, что вы имеете в виду под Отличается от переадресации HTTP? Перенаправление HTTP также устанавливает реферер как документ, в котором находился запрошенный URL-адрес. Таким образом, даже если сервер говорит браузеру получить другой URL-адрес, реферер не меняется. Но я предполагаю, что вы не подразумеваете что-то еще, а просто говорите, что if 2) использовал бы перенаправление HTTP, тогда первый веб-сайт увидел бы себя в качестве реферера (что правильно). (Удивительно, насколько сложным может быть что-то простое, когда пытаешься это описать!) - person Arjan; 10.10.2009

Я слишком ленив, чтобы пытаться интерпретировать все приведенные сценарии, но для проверки можно легко создать PHP-скрипт, возвращающий изображение, которое сообщает нам, что такое реферер:

<?php
  header("Content-type: image/png");
  header("Cache-control: no-cache");
  header("Pragma: no-cache");
  header("Expires: -1");

  $s = "Referrer: " . $_SERVER['HTTP_REFERER'];

  $im = @imagecreate(500, 13)
    or die("Cannot Initialize new GD image stream");
  $black = imagecolorallocate($im, 0, 0, 0);
  imagecolortransparent($im, $black);
  $red = imagecolorallocate($im, 255, 0, 0);
  imagestring($im, 3, 0, 0, $s, $red);
  imagepng($im);
  imagedestroy($im);
?>

Если веб-сайт отвечает HTTP-перенаправлением, например 302 Moved Temporarily, ваш браузер все равно отправит исходный реферер с перенаправленным запросом:

<?php
  header("Location: http://[..]/referrer-to-img/referrer.php?redirected");
?>

Обратите внимание, что, например, в Safari на Mac щелчок с нажатой клавишей Command (чтобы открыть ссылку в новой вкладке) и щелчок с нажатой клавишей Command-Option (в новом окне) do устанавливает реферер для этой ссылки, при выборе «Открыть ссылку в новой вкладке/окне» из контекстного меню (после щелчка правой кнопкой мыши) нет.

Удачного тестирования. ;-)

person Arjan    schedule 09.10.2009

  1. #P1# <блочная цитата> #P2#
  2. #P3# <блочная цитата> #P4#
  3. #P5# <блочная цитата> #P6#
person Andrew Hare    schedule 05.10.2009
comment
Насчет №1 не уверен. Сайт, обслуживающий изображение, будет видеть второй сайт (сайт хотлинкинга) в качестве реферера, а не себя. - person timdev; 05.10.2009
comment
# 1 не должен быть третьим сайтом ... Я на 95% уверен, что узнал, кто делал горячие ссылки на изображения с моего сайта, потому что я видел их в статистике реферера. - person Hintswen; 05.10.2009

Во-первых, HTTP Referer может быть практически чем угодно, чем его может превратить различное программное обеспечение, поддерживающее конфиденциальность, на стороне клиента или даже на каком-то шлюзе/прокси-сервере.
Тем не менее, позвольте мне попробовать:

1. That of the second web site
2. That of the second web site
3. pretty sure (not certain) but the second site still seems to be the right response.

Какой бы ни была текущая страница в момент, когда браузер отправляет запрос (будь то изображение, перенаправление и т. д.), [обычно] отправляется на сервер, лежащий в основе URL-адреса запроса. [опять же, если никакое устройство конфиденциальности не изменит это и другие значения заголовка HTTP]

person mjv    schedule 05.10.2009

Догадки, но я вполне уверен:

  1. Третий веб-сайт увидит второй сайт в качестве реферера.
  2. Первый веб-сайт видит реферера как второй веб-сайт
  3. Второй сайт.
person timdev    schedule 05.10.2009
comment
Да, мои предположения тоже были. - person Hintswen; 05.10.2009