将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是空的!
希望这可以帮助