Будет ли перенаправление 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 !

надеюсь, это может помочь