302重定向会保留引用字符串吗?


92

我需要将用户从一个页面重定向到另一页面,但是我需要维护原始的引用字符串。因此,例如,如果它们以http://www.othersite.com/pageA.jsp开头,则单击将其带到http://www.example.com/pageB.jsp的链接,然后执行302重定向到http://www.example.com/pageC.jsp,我需要引用字符串包含http://www.othersite.com/pageA.jsp

这是302重定向的正常行为吗?还是我的原推荐人被放弃,取而代之http://www.example.com/pageB.jsp?那是不希望的。

我不知道它是否有任何区别,但是我正在JSP中工作,并且正在response.sendRedirect()执行302重定向。

我应该提到我对此进行了实验,它似乎保留了原始的引用字符串(http://www.othersite.com/pageA.jsp),但我只是想确保这是正常的默认行为,而不是怪异的。


尽管我当前正在使用302重定向,但我可能可以改用301重定向。您知道301重定向的行为是否更可靠?


3
我只需要相反。执行服务器端重定向,以更改重定向上的引荐来源网址(因此删除原始引荐来源网址)。任何人?
cprcrack

Answers:


32

简短的答案是,在Referer标头或302状态代码中,相关RFC 2616 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.36中未指定。

最好的选择是对多个浏览器进行测试,看看是否存在共识行为。

对于完整的皮带和花括号,请在重定向URL中对原始引荐来源网址进行编码,这样就可以保证对其进行检索。


17
向谁可能有兴趣,我做了对主流浏览器的测试固相微萃取:stackoverflow.com/questions/2158283/...
马尔科Demaio

121

我不了解302,但今天我在某些浏览器上测试了301,结果如下:

场景:用户单击domainX上指向domainA的链接。domainA执行301重定向到domainB。

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

27
注意:此测试已经进行了一段时间,如今,即使在新标签页中打开 Chrome 26,其行为也相同。
本杰明·

未在所有浏览器上进行测试,但是302的行为似乎相同。
阿米尔·阿里·阿克巴里

注:如果重定向页面(DOMAINA)发出引荐-政策:无引用标题,然后浏览器(和Opera)将不会设置的Referer 头的请求到目标页面(即domainB)。Firefox和Edge仍然发送它。
DavidBalažic19年

12

好问题。在这种情况下,引荐来源的发送完全取决于浏览器(因为告知浏览器向新资源提出另一个请求)。

RFC 2616对此问题保持沉默:

所请求的资源临时位于其他URI下。由于重定向有时可能会更改,因此客户端应继续将Request-URI用于将来的请求。仅当由Cache-Control或Expires标头字段指示时,此响应才可缓存。

我不相信浏览器会发送正确的引荐来源。我敢打赌,至少有一个发送的东西不同于其他东西。

解决方法

如果可以,为什么不添加一个 ?override_referer=<old_url>向重定向到的URL参数,然后解析该值而不是HTTP_REFERER。

这样,您可以确保始终获得正确的结果,并且不会损失任何安全性:可以使用任何一种方式伪造引荐来源。


4
通过使引用在URL中可重写,您实际上在安全方面失去了一些东西。在大多数现代浏览器中,无法通过JavaScript更改AJAX请求的引用。但是,URL显然可以。这意味着,如果发生XSS攻击,则引荐来源比URL参数更值得信赖。别误会,引荐人仍然显然是无法完全信任的用户输入。但是,欺骗他人的数据要比更改URL困难得多。
phylae 2015年

6

我有一个相反的问题:我希望引荐来源网址为“ pageB”,但是当前的浏览器都无法以这种方式进行...

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

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

结果令人惊讶:

  • 推荐人是Chrome的pageB
  • FireFox和IE的引荐来源为空!

希望这可以帮助

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.