将302redirect维护引用string?

我需要redirect用户从一个页面到另一个,但我需要保持原来的引用string。 因此,例如,如果他们从http://www.othersite.com/pageA.jsp开始,请单击一个链接,将它们带到http://www.mysite.com/pageB.jsp ,然后执行302redirect到http://www.mysite.com/pageC.jsp ,我需要引用string包含“ http://www.othersite.com/pageA.jsp ”

这是302redirect的正常行为? 或者我原来的引用者会被抛弃,转而支持“ http://www.mysite.com/pageB.jsp ”? 这不会是可取的。

我不知道它是否有任何区别,但我正在JSP中工作,并使用response.sendRedirect()来执行302redirect。

我应该提到我对此做了一个实验,它似乎保留了原始引用string(“ http://www.othersite.com/pageA.jsp ”),但我只是想确保这是正常的默认值行为,而不是我最后的奇怪。

感谢您的帮助。

编辑添加:

虽然我目前正在使用302redirect,但我可以使用301redirect。 你知道301redirect的行为是否更可靠?

简单的答案是在相关RFC 2616 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.36中没有规定Referer头或302状态码。;

你最好的select是用几个浏览器做一个testing,看看是否有共识行为。

对于完整的腰带和大括号,请在redirecturl中对原始推荐链接进行编码,以便保证检索。

我不知道302,但我今天在一些浏览器上testing了301,结果如下:

情景 :用户点击指向domainA的domainX上的链接。 domainA做301redirect到domainB。

  • IE8 referer登陆domainB时是:domainX(甚至当使用InPrivate浏览,甚至当用户在新标签中打开链接时)
  • 在domainB上登陆的Safari4 referer是:domainX(即使用户在新标签页中打开链接)
  • 登陆domainB时的FF3.6.10 referer是:domainX(即使用户在新标签中打开链接)
  • 在domainB上登陆的Chrome5 referer是:domainX( 除非用户在新标签中打开链接)
  • 在domainB上登陆的Chrome26 referer是:domainX(即使用户在新标签页中打开链接)

好问题。 在这种情况下,引用者的发送完全依赖于浏览器(因为浏览器被告知向新资源发出另一个请求)。

RFC 2616对这个问题保持沉默:

请求的资源暂时驻留在不同的URI下。 由于redirect有时可能会被改变,所以客户端应该继续使用Request-URI来处理将来的请求。 如果由Cache-Control或Expires标头字段指示,则该响应仅可caching。

我不相信浏览器发送正确的引用。 我敢打赌,至less有一个发送与其他人不同的东西。

解决方法

如果可以的话,为什么不把?override_referer=<old_url>参数添加到您redirect到的URL中,并parsing该值而不是HTTP_REFERER。

这样,你可以确保总是得到正确的结果,而且在安全性方面你也不会失去任何东西:引用者可能是伪造的。

我有相反的问题:我想这个引用是“pageB”,但是没有一个适合的浏览器以这种方式进行…

所以我尝试了pageB上的HTMLredirect(而不是301或302redirect):

 <meta http-equiv="refresh" content="0; url=pageC.jsp" /> 

结果令人惊讶:

  • 引用是与Chrome的pageB
  • Referer与FireFox&IE是空的!

希望这可以帮助