3

Когда request.referer ничего не возвращает, всегда ли это означает, что посетитель не выполнил запрос по ссылке - то есть она каким-то образом вручную указала адрес запрашиваемой страницы?«request.referer == nil» всегда означает прямой трафик?

Или есть другие случаи, когда request.referer возвращает nil (при условии, что запрос будет успешным)?

+0

Отъезд http://stackoverflow.com/a/3104799/532252 –

ответ

8

Короткий ответ: Нет

Вообще говоря, ссылающейся - как и все другие заголовки HTTP - это пользователь представил данные. Пользовательским данным не следует доверять.

Сверху моей головы Я могу думать об этих сценариях, где реферер не будет установлен без ввода пользователем вручную URL.

  • Нажмите ссылку в почтовом клиенте.
  • Использование программного обеспечения для обеспечения конфиденциальности, которое удаляет ссылки.
  • Боты/пауки могут не устанавливать этот заголовок.
  • Following a link from a HTTPS site to a HTTP site.

Вполне возможно, что будут другие случаи (fx Я не уверен, как браузеры обрабатывают рефереры при открытии ссылок в новых окнах).

И тогда есть случаи, когда реферер установлен, но пользователь не указал адрес; особенно ботов, особенно спам-рефереров.

0

Я не проверял это, но это всегда безопасно, чтобы не проверить nil на пустое значение, но использовать blank?

request.referrer.blank? 

Это обеспечит тот случай, когда это ноль или пустая строка.

Смежные вопросы