Что такое реферер или как использовать HTTP-заголовок referer

Реферер – это важный элемент HTTP-заголовка, который позволяет отслеживать источник перехода на веб-страницу. В статье объясняется, как использовать заголовок referer для улучшения аналитики и безопасности сайта.

Узнайте, как правильно настроить и использовать referer для отслеживания трафика, предотвращения спама и других полезных целей, связанных с веб-разработкой.

Вадим Дворниковавтор материала

Сбор из referer с помощью PHP, JavaScript и ASP

PHP хранит информацию из referer в системной переменной HTTP_REFERER. Чтобы отобразить ее на PHP-странице, нужен следующий код:

if(isset($_SERVER['HTTP_REFERER'])) {
  echo $_SERVER['HTTP_REFERER'];
}

Он проверяет, содержит ли переменная значение, а затем выводит его на экран. Вместо echo $_SERVER['HTTP_REFERER']; можно задать строки скрипта таким образом, чтобы проверить различные referer.

JavaScript использует для чтения server http referer DOM. Так же, как в случае с PHP, нужно проверить, содержит ли заголовок значение. Если вы хотите управлять переменно, то сначала нужно установить данную переменную. Вот как отобразить referer на странице с помощью JavaScript.

Обратите внимание, что DOM использует альтернативное написание referer:

if (document.referrer) {
  var myReferer = document.referrer;
  document.write(myReferer);
}

После этого можно использовать заголовок в скрипте с переменной myReferer.

ASP, как и PHP, устанавливает referer в качестве системной переменной. После чего нужно получить данную информацию следующим образом:

if (Request.ServerVariables("HTTP_REFERER")) {
  Dim myReferer = Request.ServerVariables("HTTP_REFERER")
Response.Write(myReferer)
}

Также можно настроить скрипт с использование переменной myReferer.

После того как вы получили referer, что с ним делать?

После того, как вы получили информацию из HTTP referer, ее можно использовать в скриптах сайта. Например, чтобы вывести данные о том, откуда пришли посетители. Но гораздо интереснее использовать заголовок для отображения различной информации в зависимости от того, откуда пришли пользователи.

Общее приветствие

Можно вывести URL-адрес из referer в верхней части страницы в общем приветствии:

<script>
  if (document.referrer) {
    document.write("<p>Thank you for visiting from " +
document.referrer + "</p>");
  } </script>

Приветствие посетителей из поисковой системы

Когда кто-то перешел на ваш сайт из поисковой системы, можно предоставить таким пользователям немного дополнительной информации, чтобы побудить их дольше оставаться на ресурсе. Например, вывести для них ссылку на новостную рассылку сайта:

<script>
  if (document.referrer) {
    searchEngine = /google.com/;
    if (searchEngine.test(document.referrer)) {
      document.write("<p>Welcome Google visitor!</p>");
    }
  }
</script>

Передача информации в формы

Если у вас на сайте есть ссылка, кликнув по которой посетители могут сообщить о проблемах с ресурсом. Люди часто сообщают о проблемах с веб-страницей без указания URL-адреса, на котором она возникла. Но можно использовать информацию из server http referer, чтобы предположить, о какой проблеме на какой странице идет речь.

Этот скрипт добавляет referer в скрытое поле формы:

<script>
  function start() {
    var ref = document.getElementById('referrer');
    ref.value = document.referrer;
  }
  onload = start;
</script>
<input type="hidden" value="" id="referrer" />

Создание специального предложения для определенных посетителей

Возможно, вы захотите предоставить людям, которые приходят с конкретной страницы, специальное предложение на ваши товары или услуги. C этой целью можно было бы открыть новое окно, чтобы предложить страницу. Но помните, что людям не всегда нравятся всплывающие окна, так что используйте их осторожно:

<script>
  if (document.referer == "http://domain/special-offer.htm") {
    var newWin = window.open('http://mydomain/special.htm','special');
  }
</script>

Направление посетителей на другую страницу

Также можно направить людей с определенным HTTP referer на другую страницу. Будьте осторожны, так как Google и другие поисковые системы могут расценить это, как введение в заблуждение, и наказать ваш сайт:

<script>
  if (document.referrer == "http://domain/redirect") {
    location.href = "http://www.newpage.com/";
  }
</script>

Блокирование пользователей по referer с помощью .htaccess

Если вы страдаете от referer-спама с одного домена, можно просто заблокировать его на вашем сайте. Если вы используете Apache с установленным mod_rewrite, тогда можно блокировать спам с помощью нескольких строк кода (rewritecond http referrer, запрет входа без referrer ).

Добавьте следующие строки в файл .htaccess:

RewriteEngine on
# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} spammer.com [NC]
RewriteRule .* - [F]

Измените spammer.com на домен, который нужно заблокировать. Не забудьте добавить перед периодами в домене.

Не полагайтесь на referer

Помните, что возможна подмена HTTP referer, поэтому не стоит использовать его для важных страниц. Лучше применять его в качестве дополнения. Но если страница должна быть доступна только конкретным пользователям, то придется установить для нее пароль через файл htaccess.

Вадим Дворниковавтор-переводчик статьи «How to Use the HTTP Referer»

Комментарии

Оставьте свой комментарий
Пока никто не оставил комментариев