Будет ли перенаправление 302 поддерживать строку реферера?
-
23-09-2019 - |
Вопрос
Мне нужно перенаправить пользователя с одной страницы на другую, но мне нужно сохранить исходную строку ссылки.Так, например, если они начинают с http://www.othersite.com/pageA.jsp, нажмите на ссылку , которая приведет их к http://www.mysite.com/pageB.jsp, который затем выполняет перенаправление 302 на http://www.mysite.com/pageC.jsp, Мне нужно , чтобы строка referer содержала "http://www.othersite.com/pageA.jsp"
Является ли это нормальным поведением для перенаправления 302?Или мой первоначальный реферер был бы отброшен в пользу "http://www.mysite.com/pageB.jsp" ?Это было бы нежелательно.
Я не знаю, имеет ли это какое-либо значение, но я работаю в JSP и использую response.sendRedirect() для выполнения перенаправления 302.
Я должен упомянуть, что я провел эксперимент с этим, и, похоже, он сохранил исходную строку referer ("http://www.othersite.com/pageA.jsp") но я просто хотел убедиться, что это нормальное поведение по умолчанию, а не что-то странное с моей стороны.
Спасибо вам за вашу помощь.
ОТРЕДАКТИРОВАНО Для ДОБАВЛЕНИЯ :
Хотя в настоящее время я использую перенаправление 302, я, вероятно, мог бы вместо этого использовать перенаправление 301.Знаете ли вы, является ли поведение для 301 перенаправления более надежным?
Решение
Короткий ответ: это не указано в соответствующем RFC 2616 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.36 либо для заголовка Refererer, либо для кода состояния 302.
Лучше всего провести тест с несколькими браузерами и посмотреть, есть ли согласованное поведение.
Для полного ремня и подтяжек закодируйте оригинального реферера в URL перенаправления, чтобы вы могли гарантировать его получение.
Другие советы
Я не знаю насчет 302, но сегодня я протестировал 301 в некоторых браузерах, вот результаты:
СЦЕНАРИЙ:пользователь нажимает ссылку на DomainX, которая указывает на DomainA.DomainA делает 301 перенаправление на DomainB.
- IE8
referer
при посадке на DomainB это:DomainX (даже при использовании InPrivate browsing и даже когда пользователь открывает ссылку в новой вкладке) - Сафари4
referer
при посадке на DomainB это:DomainX (даже когда пользователь открывает ссылку в новой вкладке) - ФF3.6.10
referer
при посадке на DomainB это:DomainX (даже когда пользователь открывает ссылку в новой вкладке) - Хром5
referer
при посадке на DomainB это:Доменx (если не пользователь открывает ссылки в новой вкладке) - Хроме26
referer
при посадке на DomainB это:DomainX (даже когда пользователь открывает ссылки в новой вкладке)
Хороший вопрос.В этом случае отправка реферера полностью зависит от браузера (поскольку браузеру предлагается сделать еще один запрос к новому ресурсу).
RFC 2616 хранит молчание по этому вопросу:
Запрошенный ресурс временно находится под другим URI.Поскольку перенаправление может быть изменено при случае, клиент ДОЛЖЕН продолжать использовать Request-URI для будущих запросов.Этот ответ кэшируется только в том случае, если он указан полем заголовка Cache-Control или Expires.
Я бы не стал доверять браузеру в отправке нужного реферера.Бьюсь об заклад, есть по крайней мере один, который отправляет что-то отличное от других.
Обходной путь
Если вы можете, почему бы не добавить ?override_referer=<old_url>
укажите URL, на который вы перенаправляете, и проанализируйте это значение вместо HTTP_REFERER .
Таким образом, вы можете быть уверены, что всегда получите правильный результат, и вы ничего не теряете в безопасности:Реферер может быть подделан в любом случае.
У меня была противоположная проблема :Я хотел, чтобы реферер был "PageB", но ни одна из текущих процедур браузера не выполнялась таким образом...
Итак, я попробовал с перенаправлением HTML на PageB (вместо перенаправления 301 или 302) :
<meta http-equiv="refresh" content="0; url=pageC.jsp" />
И результат был удивительным :
- Реферер - это страница B с Chrome
- Refererer ПУСТ в FireFox и IE !
Надеюсь, это может помочь