HTTP Referer не всегда передается
У меня есть приложение, которое регистрирует посещения пользователей. Ни один из этих посещений напрямую не доступен, 100% этих посещений отправляются с другого сайта.
Я передаю $_SERVER['HTTP_REFERER']
через базу данных. Приблизительно 35% зарегистрированных заходов проходят референт, остальные - пустые.
Есть ли причина для этого?
Ответы
Ответ 1
Если пользователь посещает ваш сайт напрямую, нет реферера. Также возможно, что они настроили его, поэтому их браузер никогда не отправляет реферер.
В соответствии с этим ответом браузер не обязательно отправляет реферер при выполнении метаобновления.
Ответ 2
Существует несколько причин, по которым HTTP_REFERER
может быть пустым.
- Вы должны понимать это переменную среды, заданную браузером. Значение пользователей может удалить его или даже изменить, если они так намереваются.
- Пользователи, получающие доступ к ссылке из закладки, истории или путем ввода ссылки вручную, не имеют реферирования.
- Известно также, что IE удаляет референт в ситуациях, вращающихся вокруг javascript. Например,
window.open
, window.location
и даже установка target="_blank"
в якорях или meta refresh
.
- Нажав встроенную ссылку в приложении чата, документ PDF/Word/Excel, также не будет установлен референт.
- Использование AJAX,
file_get_contents
, fopen
и других подобных функций на других языках, вероятно, не будет устанавливать запрос реферера.
- cURL, fsockopen, приложения, которые имеют компоненты, подобные браузерам не могут устанавливать референт.
Есть, вероятно, больше ситуаций, когда это может произойти, я буду обновлять, если я могу думать о чем-то, что кажется разумным.
Ответ 3
Браузеры иногда будут включать referer
в запросе. Но это необязательно делать (referer
является добровольным на 100%). Действительно, существуют различные проблемы конфиденциальности и безопасности, связанные с referer
(например, если сайт HTTPS ссылается на сайт HTTP, браузер не должен включать ссылочный сайт как referer
). Поэтому не полагайтесь на это.
Ответ 4
При связывании одного документа с другим в Internet Explorer 4.0 и более поздних версиях заголовок Referer не будет отправлен, если ссылка находится на странице HTTPS на странице, отличной от HTTPS. Заголовок Referer также не будет отправлен, если ссылка связана с протоколом, отличным от HTTP (S), например file://, на другой странице. для получения дополнительной информации перейдите по этой ссылке
Ответ 5
- Прямой доступ к вашей странице (ввод URL-адреса в адресной строке или из закладок, истории и т.д.)
- Настройки браузера (отключенный реферер или пустой)
- если кто-то запрашивает содержимое страницы с помощью file_get_contents() function...
Ответ 6
Обычно, когда вы застряли, выясните, почему он отсутствует:
- Когда-нибудь ваш референт https, и вы на http, он будет потерян.
В противном случае:
- Пользователь получает доступ напрямую, указав URL-адрес.
- Пользователь имеет закладки и идет из закладок.
- Когда-то пользователь сохранял значение по умолчанию для браузера (аналогично закладке)
- Прокси-серфинг может удалить референт.
- доступ к веб-сайту в виде ботов (поисковая система)