Будет ли перенаправление 302 поддерживать строку referer?
Мне нужно перенаправить пользователя с одной страницы на другую, но мне нужно сохранить исходную строку реферер. Так, например, если они начинают на http://www.othersite.com/pageA.jsp щелкните по ссылке, чтобы http://www.mysite.com/pageB.jsp, который затем выполняет редирект 302 на http://www.mysite.com/pageC.jsp, мне нужны строки реферера, чтобы содержать "http://www.othersite.com/pageA.jsp"
Это нормальное поведение для перенаправления 302? Или мой первоначальный референт будет отброшен в пользу"http://www.mysite.com/pageB.jsp"? Это было бы нежелательно.
Я не знаю, имеет ли это значение, но я работаю в JSP, и я использую response.sendRedirect () для выполнения перенаправления 302.
Я должен упомянуть, что я провел эксперимент с этим, и, кажется, сохранил исходную строку реферер ( " http://www.othersite.com/pageA.jsp"), но я просто хотел убедиться, что это нормальное поведение по умолчанию, а не что-то странное с моей стороны.
Спасибо за помощь.
ОТРЕДАКТИРОВАНО, ЧТОБЫ ДОБАВИТЬ:
хотя в настоящее время я использую перенаправление 302, я, вероятно, мог бы использовать перенаправление 301. Вы знаете, является ли поведение для 301 перенаправления более надежным?
4 ответов
короткий ответ-это не указано в соответствующем RFC 2616 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.36 либо для заголовка Referer, либо для кода состояния 302.
лучше всего сделать тест с несколькими браузерами и посмотреть, есть ли консенсус-поведение.
для полного пояса и фигурных скобок кодируйте исходный реферер в URL перенаправления, чтобы вы могли гарантировать его получение.
Я не знаю о 302, а не 301 на некоторых браузерах сегодня, вот результаты:
сценарий: пользователь нажимает ссылку на domainX, которая указывает на domainA. domainA выполняет перенаправление 301 на domainB.
- IE8
referer
при посадке на domainB: domainX (даже при использовании просмотра InPrivate и даже когда пользователь открывает ссылку в новой вкладке) - Safari4
referer
при посадке на domainB: domainX (даже когда пользователь открывает ссылку в новом tab) - ФФ3.6.10
referer
при посадке на domainB: domainX (даже когда пользователь открывает ссылку в новой вкладке) - Chrome5
referer
при посадке на domainB: domainX (если пользователь открывает ссылки в новой вкладке) - Chrome26
referer
при посадке на domainB: domainX (даже когда пользователь открывает ссылки в новой вкладке)
хороший вопрос. В этом случае отправка реферера полностью зависит от браузера (потому что браузеру говорят сделать еще один запрос на новый ресурс).
RFC 2616 молчит о проблеме:
запрошенный ресурс временно находится под другим URI. Поскольку перенаправление может быть изменено время от времени, клиент должен продолжать использовать запрос-URI для будущих запросов. Этот ответ кэшируется только в том случае, если указано полем заголовка Cache-Control или Expires.
Я бы не доверил браузеру отправить правильный реферер. Бьюсь об заклад, есть хотя бы один, который посылает что-то отличное от других.
решение
Если вы можете, почему бы не добавить URL-адрес перенаправления, и разобрать, что значение HTTP_REFERER.
таким образом, вы можете быть уверены, что всегда получите правильный результат, и вы ничего не теряете в безопасности: референт может быть подделан в любом случае.
У меня была проблема oposite: я хотел, чтобы реферер был "pageB", но ни одна из процедур браузера curent таким образом...
поэтому я попытался с перенаправлением HTML на pageB (вместо перенаправления 301 или 302):
<meta http-equiv="refresh" content="0; url=pageC.jsp" />
и результат был неожиданным :
- Referer является pageB с Chrome
- Referer пуст с FireFox & IE !
надеюсь, это может помочь