Referrer简介:
在流量监测中,访客的来源信息是一个很重要的信息,包括访客的访前链接,以及搜索关键词。在HTTP请求中有一个referrer标签,用来指明当前流量的来源参考页。例如在http://www.bitauto.com/上点击一个链接到达www.taoche.com首页,那么就referrer就是http://www.bitauto.com/了。在Javascript中,我们可以通过document.referrer来获取同样的信息。通过这个信息,我们就可以知道访客是从什么渠道来到当前页面的。这对于网站分析来说,是非常重要的,这可以告诉我们不同渠道带来的流量的分布情况,还有用户搜索的关键词等,都是通过分析这个referrer信息来获取的。
请求中丢失Referrer信息的几种场景:
- 直接流量:访客是通过直接键入地址,进入网页的,这种情况产生的流量属于直接流量,直接流量的请求中没有referrer信息的。
- 点击Flash内部链接:如果是通过投放的falsh广告到的本站的话,通过访前链接查询流量就是非常不准确的了。
- HTTPS跳转到HTTP:从HTTPS的网站跳转到HTTP的网站时,浏览器是不会发送referrer的。
Referrer信息的丢失使得相对不那么准确的流量数据更加不可琢磨了,也为我们的广告流量监测带来困扰。很多流量统计工具会因此将这部分流量归入“直接流量”,和用户直接键入网址等价了。
希望浏览器不发送referer头的场景:
Referrer策略用于控制浏览器在何种情况下发送referrer信息。该策略可以保护用户的隐私,但也可以使得目前绝大多数站点的防盗链机制失效。
- 隐私:一个社交网站会有每个用户的简介页面,用户会在他们的个人主页中添加一些链接。社交网站可能不希望泄露用户的个人主页URL给被链接的网站(因为个人主页URL可能会泄露其主人的身份信息)。
- 安全:一个网站应用使用https和基于URL的会话标识。应用也许希望链接其他站点的https资源但不想泄露位于URL中的用户会话标识符。
- 引用:基于HTTPS的博客可能希望连接到一个HTTP上的博客并收到引用链接
referrer策略
1.Referrer策略包含以下值:
- 空字符串
- no-referrer
- no-referrer-when-downgrade
- same-origin
- origin
- strict-origin
- origin-when-cross-origin
- strict-origin-when-cross-origin
- unsafe-url
2.下面简单介绍下每种Referrer策略。
- .no-referrer:表示所有的请求都不带referrer。
- .no-referrer-when-downgrade:主要针对于受TLS保护的URL(如https),简单的说就是https的页面中,当连接的资源也是https的,则发送完整的referrer,如果连接的资源是http的,就不发送referrer。
- same-origin:对于同源的链接,会发送referrer,其他的不会。
- origin:这个策略对于任何资源来说只发送源的信息,不发送完整的url。
- strict-origin(浏览器可能不支持):这个策略类似于origin和no-referrer-when-downgrade的合体,如果一个https页面中链接到http的页面或资源,则不会发送referrer。http页面链接以及https链接到https都只发送来源页面的源信息。
- origin-when-cross-origin:该策略在同源的链接中发送完整的URL,其他情况仅发送源信息。
- strict-origin-when-cross-origin(浏览器可能不支持):对于同源请求,发送完整的URL;对于同为https的,只发送源信息;对于http页面只发送源信息;https页面中的http请求不发送referrer。
- unsafe-url:这个主要是解决https页面中的http资源不发referrer的问题,它会使在https页面中http资源发送完整的referrer。
- 空字符串:表示没有referrer策略,默认为no-referrer-when-downgrade。
3.用法:
Referrer策略可以通过以下方法声明:
- 通过http请求头中的Referrer-Policy字段
- 通过meta标签,name为referrer
- 通过<a>、<area>、<img>、<iframe>、<link>元素的referrerpolicy属性。
- 通过<a>、<area><link>元素的rel=noreferrer属性
- 通过隐式继承
4.用法举例:
1.http请求头
Referrer-Policy: no-referrer
2.meta标签
<meta name=”referrer” content=”no-referrer” />
3.referrerpolicy属性
<a href=“http://example.com” referrerpolicy=“origin”>
4.rel=noreferrer属性