0

我试图找出这一点,并得到http://www.google.com/ncr使用 302(或 301)重定向(不确定是否真的如此)。

我也明白了,服务器端重定向(301 和 302)不会改变原来的引用者,即如果我直接访问http://www.google.com/ncr,那么请求会转到 google.com,但什么也没有在标题中可以显示我来自http://www.google.com/ncr

所以我想知道谷歌是如何做到这一点的。

4

1 回答 1

0

人们经常使用 servlet 执行此操作。servlet 将检测到某种模式并发出重定向到聚合 url。重定向是针对浏览器的。就像浏览器已经激活/单击了一个新链接。

就像您在 url 栏上输入 google.com/abc 然后在地址栏上输入 google.com 一样。由于隐私问题,浏览器不会让服务器知道它之前访问过的 URL。

当然,如果你在同一个会话中,访问同一个站点,谷歌将有服务器端和客户端 cookie 跟踪你,你刚刚来自另一个谷歌 url。如果是网络服务提供商,我肯定会利用了解您的浏览历史。

因此,由于您的浏览历史 www.whatever。com 会针对不同的用户或会话重定向到不同的页面。

附录

“由于隐私问题,浏览器不会让服务器知道它之前访问过的 URL。” 不太正确。

更完整的规范是

如果引用页面是使用安全协议传输的,则客户端不应在(非安全)HTTP 请求中包含Referer 头字段。

http://www.w3.org/Protocols/rfc2616/rfc2616-sec15.html

谷歌强迫我们使用 https 的另一个原因使我们受益。

非安全http的重定向流

假设我们有

  • URL A 有一个指向 B 的链接,该链接指向 URL B。
  • URL B 是对 URL C 的重定向

URL C 的服务器会将引用者视为 URL A,而不是 URL B。也就是说,浏览器会将引用者设置为 URL A。

使用 cookie 重定向

我相信您应该能够在 30x 重定向中包含一个 setcookie 标头。我没有尝试过,所以我不知道哪个浏览器会忽略或尊重它。

顺便提一句

我非常怀疑我的回答是否能满足您的问题。我个人觉得它是不完整的,我希望有人提出一个更好的答案,你应该选择它作为答案。事实上,我认为您应该取消选择此作为答案,以便您的问题重新回到未回答的问题池中。对不起。

于 2012-08-14T03:22:17.530 回答