Jsp 302重定向是否会维护referer字符串?
我需要将用户从一个页面重定向到另一个页面,但我需要维护原始的referer字符串。例如,如果他们从开始,单击一个链接将他们带到,然后执行302重定向到,我需要referer字符串包含Jsp 302重定向是否会维护referer字符串?,jsp,redirect,referrer,http-status-code-302,http-referer,Jsp,Redirect,Referrer,Http Status Code 302,Http Referer,我需要将用户从一个页面重定向到另一个页面,但我需要维护原始的referer字符串。例如,如果他们从开始,单击一个链接将他们带到,然后执行302重定向到,我需要referer字符串包含http://www.othersite.com/pageA.jsp 这是302重定向的正常行为吗?或者我原来的推荐人会被删除,转而支持http://www.example.com/pageB.jsp?这是不可取的 我不知道这是否有什么不同,但我在使用JSP,并且使用response.sendRedirect()执行
http://www.othersite.com/pageA.jsp
这是302重定向的正常行为吗?或者我原来的推荐人会被删除,转而支持http://www.example.com/pageB.jsp
?这是不可取的
我不知道这是否有什么不同,但我在使用JSP,并且使用response.sendRedirect()
执行302重定向
我应该提到,我用这个做了一个实验,它似乎保留了原始的referer字符串(http://www.othersite.com/pageA.jsp
)但我只是想确保这是正常的默认行为,而不是我这边的怪异行为
虽然我目前使用的是302重定向,但我可能会改用301重定向。您知道301重定向的行为是否更可靠吗?好问题。在这种情况下,referer的发送完全取决于浏览器(因为浏览器被告知向新资源发出另一个请求) 对这个问题保持沉默: 请求的资源临时驻留在不同的URI下。由于重定向有时可能会被更改,因此客户端应该继续使用请求URI来处理将来的请求。只有在缓存控件或Expires标头字段指示时,此响应才可缓存 我不相信浏览器会发送正确的推荐人。我打赌至少有一个发送的内容与其他不同 解决方法 如果可以,为什么不在重定向到的URL中添加一个
?override\u referer=
参数,并解析该值而不是HTTP\u referer
这样,您就可以确保始终得到正确的结果,并且不会在安全性方面丢失任何东西:引用者可以通过任何方式伪造。简短的回答是,相关RFC 2616中没有指定引用者标题或302状态代码 您最好的选择是使用多个浏览器进行测试,看看是否存在一致的行为
对于完整的腰带和背带,请在重定向URL中对原始参考者进行编码,这样您就可以保证检索到它。我不知道302,但我今天在一些浏览器上测试了301,结果如下: 场景:用户单击指向domainA的domainX上的链接。domainA将301重定向到domainB
- IE8
当登录到domainB时为:domainX(即使使用InPrivate浏览,甚至当用户在新选项卡中打开链接时)referer
- Safari4
登陆域名b时为:domainX(即使用户在新选项卡中打开链接)referer
- FF3.6.10
当登录到domainB时为:domainX(即使用户在新选项卡中打开链接)referer
- Chrome5
当登录到domainB时为:domainX(除非用户在新选项卡中打开链接)referer
- 登陆domainB时的Chrome26
是:domainX(即使用户在新选项卡中打开链接)referer
结果令人惊讶:
- 推荐人是带Chrome的pageB
- FireFox和IE的Referer为空李>
希望这能对感兴趣的人有所帮助,我在主要浏览器上进行了spme测试:注意:这项测试已经进行了一段时间,现在Chrome 26即使在新选项卡中打开时也会以相同的方式运行。并非在所有浏览器上都进行了测试,但302的行为似乎是相同的。注意:如果重定向页面(domainA)发布推荐人策略:无推荐人标头,则Chrome(和Opera)将不会在目标页面(domainB)的请求上设置推荐人标头。Firefox和Edge仍然发送它。我只需要相反的信息。执行服务器端重定向更改重定向上的引用(因此删除原始引用)。有人吗?通过在URL中重写referer,您实际上正在失去一些安全性。在大多数现代浏览器中,AJAX请求的引用不能通过JavaScript更改;然而,URL显然可以。这意味着在发生XSS攻击时,referer比URL参数更可靠。不要误解我的意思,referer显然仍然是用户输入,不能完全信任。但为他人伪造数据要比更改URL困难得多。
<meta http-equiv="refresh" content="0; url=pageC.jsp" />