
最近Chrome宣布,从85版本开始,将Referrer-Policy默认策略从
no-referrer-when-downgrade 变更到 strict-origin-when-cross-origin,今天来分析这个调整带来的一些影响。
首先Chrome的这个调整会减少网站对跨站用户的静默追踪,是非常好的措施。
设想你正在看一些羞羞的东西,比如链接是:http://www.xxxx.com/a?b=羞羞,如果你在这个页面点了一个微博链接,根据HTTP协议,你的浏览器在向微博发送请求的时候,也会把你现在浏览的页面URL通过Referer发给微博的服务器。
如果你此时登录了微博账号,那微博自然就知道你是谁,而且也知道是从羞羞的URL那里过来的。
如果按照Chrome的新策略,微博就只能知道你是通过http://www.xxxx.com来,拿不到具体的URL。
那,我们先来学习一下Referrer-Policy。
什么是Referrer-Policy
HTTP头中的Referrer-Policy主要是用来监管哪些访问来源信息,它会在Referer中发送一些信息。
可以看到Referer的值,是微博主页,说明我是从微博主页使用微博搜索并跳转的。
这里要注意Referer头应该是Referrer,少了一个字母r,因为在制定规范时犯了一个语法错误,一直沿用这个错误至今。
- no-referrer
- no-referrer-when-downgrade
- origin
- origin-when-cross-origin
- same-origin
- strict-origin
- strict-origin-when-cross-origin
- unsafe-url
no-referrer-when-downgrade是默认值,表示在没有指定任何策略的情况下用户代理的默认行为。在同等安全级别的情况下,引用页面的地址会被发送(HTTPS->HTTPS),但是在降级的情况下不会被发送 (HTTPS->HTTP)。
strict-origin-when-cross-origin则是对于同源的请求,会发送完整的URL作为引用地址;在同等安全级别的情况下,发送文件的源作为引用地址(HTTPS->HTTPS);在降级的情况下不发送此首部 (HTTPS->HTTP)。
在上图中,微博搜索跨域加载图片,Referrer-Policy为默认值no-referrer-when-downgrade,Referer带着来源网页。
这次更改的影响
网站的Referrer-Policy设置影响Referer头的信息。如下图所示:
默认为no-referrer-when-downgrade。跨域访问的话,Referer是URL。
如果Chrome把默认策略改为strict-origin-when-cross-origin,在你访问的网站没有设置的情况下,是以下这种情况:
我想体验怎么办
Chrome更改并非突然,其实从Chrome 81版本开始,就可以通过访问
chrome://flags/#reduced-referrer-granularity
来手动打开此功能,只是在Chrome 85版本之后把它变成了默认值。体验最好的办法就是升级Chrome到85版本。
这次的更改,对一些防盗链,返利网站应该有一些影响,如果网站指定了Referrer-Policy,则不受影响。
- https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Referrer-Policy
- https://developers.google.com/web/updates/2020/07/referrer-policy-new-chrome-default
- https://site-one-dot-referrer-demo-280711.ey.r.appspot.com/stuff/detail?tag=red&p=p0