Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp 302重定向是否会维护referer字符串?_Jsp_Redirect_Referrer_Http Status Code 302_Http Referer - Fatal编程技术网

Jsp 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()执行

我需要将用户从一个页面重定向到另一个页面,但我需要维护原始的referer字符串。例如,如果他们从开始,单击一个链接将他们带到,然后执行302重定向到,我需要referer字符串包含
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
    referer
    当登录到domainB时为:domainX(即使使用InPrivate浏览,甚至当用户在新选项卡中打开链接时)
  • Safari4
    referer
    登陆域名b时为:domainX(即使用户在新选项卡中打开链接)
  • FF3.6.10
    referer
    当登录到domainB时为:domainX(即使用户在新选项卡中打开链接)
  • Chrome5
    referer
    当登录到domainB时为:domainX(除非用户在新选项卡中打开链接)
  • 登陆domainB时的Chrome26
    referer
    是:domainX(即使用户在新选项卡中打开链接)

我遇到了一个问题:我希望引用者是“pageB”,但现在的浏览器都不是这样处理的

因此,我尝试在pageB上使用HTML重定向(而不是301或302重定向):


结果令人惊讶:

  • 推荐人是带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" />