Referer字段丢失问题

HTTP协议规定:

Clients SHOULD NOT include a Referer header field in a (non-secure) HTTP request if the referring page was transferred with a secure protocol.

https://www.w3.org/Protocols/rfc2616/rfc2616-sec15.html#sec15.1.3


15.1.3 Encoding Sensitive Information in URI's

Because the source of a link might be private information or might reveal an otherwise private information source, it is strongly recommended that the user be able to select whether or not the Referer field is sent. For example, a browser client could have a toggle switch for browsing openly/anonymously, which would respectively enable/disable the sending of Referer and From information.

Clients SHOULD NOT include a Referer header field in a (non-secure) HTTP request if the referring page was transferred with a secure protocol.

Authors of services which use the HTTP protocol SHOULD NOT use GET based forms for the submission of sensitive data, because this will cause this data to be encoded in the Request-URI. Many existing servers, proxies, and user agents will log the request URI in some place where it might be visible to third parties. Servers can use POST-based form submission instead



https页面中夹杂http链接,用户访问时,referer会被丢失,导致大数据埋点采集不到数据,影响业务数据采集

在https->http跳转中,refer是不建议被传递的,而https->https和http->https则没有这个问题。
补充下,网站可以通过设置meta头信息: 

 

来让浏览器把refer带到下一个页面,但是,这是一个浏览器行为,并非标准!就是说并非所有浏览器都支持。


摘自网络:

什么是HTTP Referer

简言之,HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。Referer其实应该是英文单词Referrer,不过拼错的人太多了,所以编写标准的人也就将错就错了。

我们通过HttpWatch也可以看到每次请求的Header中,基本上都是Referer值,值就是当前界面的url


容易丢失的原因

1、IE6、7下使用window.location.href=url进行界面的跳转

    一般都是在当前窗口内进行新增、修改、查看操作,也有一些是删除操作,更有极少是查询操作。

    建议查询时,如果条件较少,可以用get的方式提交form。条件较多还是post方式吧,不然IE6、7的url长度又超长了

    其他操作可以写一个公共的跳转方法,模仿超链接的形式在当前窗口打开。

2、IE6、7下使用window.open

     同上一种情况,能使用模仿超链接(target=_blank)的形式打开,就用超链接吧,不行的话,也没办法了

3、Tab页框架打开方式

    一般使用Tab页框架的,tab页的打开方式都是在父界面或顶层界面中执行js方法来控制tab页。这是Referer就成了执行js方法所在的界面,也就是父界面或顶层界面。

以下是其他场景也会丢失,从网上搜索得来,本次测试未涉及

 

 

1、鼠标拖拽打开新窗口

鼠标拖拽是现在非常流行的用户习惯,很多浏览器都内置或者可以通过插件的方式来支持鼠标拖拽式浏览。但是通过这种方式打开的页面,基本全都丢失referrer。并且,这种情况下,也无法使用window.opener的方式去获取丢失的referrer了。

2、点击Flash内部链接

点击Flash上到达另外一个网站的时候,Referrer的情况就比较杂乱了。

IE下,通过客户端Javascript的document.referrer读取到的值是空的,但是如果你使用流量监控软件看一下的话,你会发现,实际上HTTP请求中的Referer报文头却是有值的,这可能是IE实现的Bug。同时,这个值指向的是Flash文件的地址,而不是来源网页的地址。

3、HTTPS跳转到HTTP

从HTTPS的网站跳转到HTTP的网站时,浏览器是不会发送referrer的。这个各大浏览器的行为是一样的。

例如,我们在HTTPS下使用Google Reader或是Gmail的时候,点击某个链接去到另外一个网站,那么从技术上来说,这样的访问和用户直接键入网址访问是没有什么分别的。





你可能感兴趣的:(网络)