В HTTP " Referer " (неправильное написание " Referrer " [1] ) — это необязательное поле заголовка HTTP , которое идентифицирует адрес веб-страницы (т. е. URI или IRI ), с которой был запрошен ресурс. Проверяя реферер, сервер, предоставляющий новую веб-страницу, может увидеть, откуда исходил запрос.
В наиболее распространенной ситуации это означает, что когда пользователь нажимает на гиперссылку в веб-браузере , заставляя браузер отправлять запрос на сервер, содержащий целевую веб-страницу, запрос может включать поле Referer, которое указывает последнюю страницу, на которой находился пользователь (ту, где он нажал на ссылку).
Веб-сайты и веб-серверы регистрируют содержимое полученного поля Referer для идентификации веб-страницы, с которой пользователь перешел по ссылке, в рекламных или статистических целях. [ требуется ссылка ] Это влечет за собой потерю конфиденциальности для пользователя и может представлять угрозу безопасности . [2] Для снижения рисков безопасности браузеры неуклонно сокращают объем информации, отправляемой в Referer. По состоянию на март 2021 года Chrome , [3] Edge на основе Chromium , Firefox , [4] Safari [5] по умолчанию отправляют только источник в запросах между источниками, удаляя все, кроме имени домена.
Неправильное написание слова referrer было введено в первоначальном предложении ученого-компьютерщика Филлипа Халлама-Бейкера о включении поля заголовка «Referer» в спецификацию HTTP . [6] [7] Неправильное написание было установлено на камне к моменту (май 1996 г.) его включения в документ стандартов Запроса комментариев RFC 1945 [8] (который «отражает общее использование протокола, называемого «HTTP/1.0 » ' в то время); соавтор документа Рой Филдинг заметил в марте 1995 г., что «ни один (referer, ни referrer) не понимается» стандартной проверкой орфографии Unix того периода. [9] С тех пор «Referer» стало широко используемым написанием в отрасли при обсуждении HTTP-рефереров; однако использование неправильного написания не является универсальным, поскольку правильное написание «referrer» используется в некоторых веб-спецификациях, таких как Referrer-Policy
заголовок HTTP или Document Object Model . [2]
При посещении веб-страницы реферером или ссылающейся страницей является URL-адрес предыдущей веб-страницы, с которой был выполнен переход по ссылке.
В более общем смысле реферер — это URL предыдущего элемента, который привел к этому запросу. Например, реферер для изображения — это, как правило, HTML- страница, на которой оно должно быть отображено. Поле реферера — это необязательная часть HTTP-запроса, отправляемого веб-браузером на веб-сервер. [10]
Многие веб-сайты регистрируют рефереры как часть своей попытки отслеживать своих пользователей . Большинство программного обеспечения для анализа веб-журналов могут обрабатывать эту информацию. Поскольку информация о реферере может нарушать конфиденциальность , некоторые веб-браузеры позволяют пользователю отключать отправку информации о реферере. [11] Некоторые прокси-серверы и брандмауэры также отфильтровывают информацию о реферере, чтобы избежать утечки местоположения непубличных веб-сайтов. Это, в свою очередь, может вызвать проблемы: некоторые веб-серверы блокируют части своего веб-сайта для веб-браузеров, которые не отправляют правильную информацию о реферере, в попытке предотвратить глубокое связывание или несанкционированное использование изображений ( кража полосы пропускания ). Некоторое прокси-программное обеспечение может указывать адрес верхнего уровня целевого веб-сайта в качестве реферера, что уменьшает эти проблемы, но в некоторых случаях все еще может разглашать последнюю посещенную пользователем веб-страницу.
Многие блоги публикуют информацию о реферерах, чтобы ссылаться на людей, которые ссылаются на них, и, таким образом, расширять обсуждение. Это, в свою очередь, привело к росту реферерского спама : отправка поддельной информации о реферерах с целью популяризации сайта спамера.
Можно получить доступ к информации о реферере на стороне клиента, используя document.referrer в JavaScript . [12] Это может быть использовано, например, для индивидуализации веб-страницы на основе поискового запроса пользователя. Однако поле реферера не всегда включает ключевые слова поиска, например, при использовании поиска Google с HTTPS. [13]
Большинство веб-серверов ведут журналы всего трафика и регистрируют HTTP-реферер, отправленный веб-браузером для каждого запроса. Это вызывает ряд проблем с конфиденциальностью, и в результате было разработано несколько систем, предотвращающих отправку веб-серверами настоящего URL-адреса реферера. Эти системы работают либо путем заполнения поля реферера, либо путем замены его неточными данными. Как правило, пакеты интернет-безопасности заполняют данные реферера, в то время как веб-серверы заменяют их ложным URL-адресом, обычно своим собственным. Это поднимает проблему спама реферера. Технические детали обоих методов довольно последовательны — программные приложения действуют как прокси-сервер и манипулируют HTTP-запросом, в то время как веб-методы загружают веб-сайты во фреймах, заставляя веб-браузер отправлять URL-адрес реферера своего веб-адреса. Некоторые веб-браузеры предоставляют своим пользователям возможность отключать поля реферера в заголовке запроса. [11]
Большинство веб-браузеров не отправляют поле реферера, когда им предписано перенаправить с помощью поля «Обновить». Это не относится к некоторым версиям Opera и многим мобильным веб-браузерам. Однако этот метод перенаправления не рекомендуется Консорциумом Всемирной паутины (W3C). [14]
Если доступ к веб-сайту осуществляется через защищенное соединение HTTP (HTTPS) и ссылка указывает куда-либо, кроме другого защищенного местоположения, то поле реферера не отправляется. [10]
В стандарт HTML5 добавлена поддержка атрибута/значения rel="noreferrer"
, который предписывает пользовательскому агенту не отправлять реферер. [15]
Другой метод скрытия реферера заключается в преобразовании исходного URL-адреса ссылки в URL-адрес на основе схемы Data URI, содержащий небольшую страницу HTML с метаобновлением исходного URL-адреса. Когда пользователь перенаправляется со data:
страницы, исходный реферер скрывается.
Стандарт Content Security Policy версии 1.1 представил новую директиву referrer , которая позволяет больше контролировать поведение браузера в отношении заголовка referrer. В частности, она позволяет веб-мастеру указать браузеру не блокировать referrer вообще, показывать его только при перемещении с тем же источником и т. д. [16]