如何获取https页的referrer

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获取https页的referrer相关的知识,希望对你有一定的参考价值。

恰好之前写过一篇文章分析过百度取消关键词显示的原来,原文贴过来分享一下,水平有限,欢迎指正。
这段时间,关于百度全面取消referer关键词显示的消息在SEO圈子里热了起来,且在客户端可以通过document.referrer来获取,也就是说referer的发送实际上是一个浏览器行为,发送与否的决定权是在浏览器手里。虽然这样说,但是HTTP协议对什么情况下,浏览器该发送,什么情况下不该发送有着严格的规定。
下面几种情况下,可以控制浏览器是否发送referer:
1,当网站使用refresh字段进行跳转的时候,大多数浏览器不发送referer;
2,从用户从一个HTTPS的网站点击链接到另一个HTTP的网站时,不发送referer;
3,html5中,a标签的rel = “noreferrer”, 可以让浏览器不发送referer;
4,使用Data URI scheme链接的,浏览器也不发送referer;
5,使用Content Security Policy, 也可以让浏览器不发送referer;
6,在html头部中使用meta标签来控制不让浏览器发送referer;
大家可能就会想到,百度是在全站HTTPS化之后,不支持referer的,那肯定是HTTPS的关系,实际上对这方面有关注的可能了解到,在百度HTTPS化之后一段时间内,三方的流量统计工具还是可以统计到搜索关键词的,原因在于百度采取了跳转页的方式进行搜索关键词传递
当浏览器支持js时候,通过window.location.replace来跳转,不支持的时候,通过refresh进行跳转。注意name=”referrer”的alway字段,可以让浏览器总是发送referer,关于Meta referrer的介绍,可以点击这里。
那百度是如何做到不传递关键词的呢?其实细节不在这里,而是在搜索结果页面上,细心的人可能发现了,新的跳转页面url发生了两点变化:
1, HTTP变成HTTPS了;
2, wd字段为空了。
这样以来,即使跳转页面中的meta
referrer字段为alway,关键词的字段也不会被第三方监控到了, 当然,其它的字段url,eqid第三方仍可监控(但是这并没有什么卵用)。
而在更早之前就采用HTTPS,并且取消关键词显示的Google直接在跳转页面中给referrer设置了origin的属性,这样一来第三方也只能监控到来源网站。
以下是对问题的回答:
根据上文的说明,一般情况下,从HTTPS站到HTTP站点的跳转,浏览器默认不发送referrer,可以通过大概两种办法让浏览器传送referrer:
1,在A站的head中加入<meta name="referrer"content="always">
2,B站也采用HTTPS
当然如果A站强制规定不发送referrer,B站又没有对A站的控制权,就像上午中提到的一样,我们是无法控制让第三方统计工具统计到百度搜索来源关键词的。
参考技术A js完整代码: var refer=document.referrer; document.getElementById('backurl').value=refer; “HTTP_REFERER” 链接到当前页面的前一页面的 URL 地址。
不是所有的用户代理(浏览器)都会设置这个变量,而且有的还可以手工修改 HTTP_REFERER。

以上是关于如何获取https页的referrer的主要内容,如果未能解决你的问题,请参考以下文章

https和http 调用过程中请求头 referrer 获取不到的问题

DJANGO开发的留言板, 如何获取上一页的url?

C# CefSharp 如何获取当前页的URL

如何获取下一页的页面源

如何在 ASP.net 页面中获取母版页的 Div?

如何在引导程序中获取下一页的图像值[重复]