理论上,浏览器不会将 HTTPS 站点的 referer 信息传递到 HTTP 站点。根据我的经验,情况一直如此。但我刚刚发现了一个例外,我想了解它为什么有效,这样我也可以使用它。
在以下网址搜索“我的引荐来源是什么”https://www.google.ca/
例如:https://www.google.ca/search?q=what+is+my+referer
有几个网站会显示 referer。它们似乎都“起作用”了,尽管它们不应该起作用。例如,单击 www.whatismyreferer.com。我得到:
Your referer:
https://www.google.ca/
请注意,有时(很少见)我会得到“无引用”的结果。返回并再次单击该链接,下次它将“有效”。
这不应该发生。www.whatismyreferer.com 是一个非 HTTPS 网站。不应传递 referer 标头,但事实并非如此。
这是怎么回事?我如何才能从我的 HTTPS 网站对我链接到的 HTTP 网站执行相同的操作?
答案1
看起来这是由于<meta>
Google 正在使用的新标头所致:
<meta name="referrer" content="origin">
规格:https://w3c.github.io/webappsec-referrer-policy/
目前只有一些浏览器完全支持,所以这不是一个完整的解决方案,但肯定是一个开始!
答案2
这是标准行为。
https://www.rfc-editor.org/rfc/rfc2616#section-15.1.3说
如果引用页面是通过安全协议传输的,则客户端不应该在(非安全)HTTP 请求中包含 Referer 标头字段。
所以如果你的客户这样做,那就违反了标准。
再说了,谷歌就是标准,他们可以做任何他们想做的事:-)
答案3
这似乎是 google 页面上的 javascript 所做的事情。在启用 noscript 的 Firefox 中看不到它,在 Windows 上的 Chrome 中禁用 javascript 后也看不到它。我不知道具体是什么,因为我没有深入研究过。
答案4
这是因为当你点击链接时,你会被重定向到https://www.google.... 到http://www.google...然后您将被重定向到 www.whatismyreferer.com
而且就像你说的,http 网站之间会传输 referer。
你可以用Firefox 扩展