Referer请求头

本文分享自微信公众号 - code秘密花园(code_mmhy),作者:ConardLi

原文出处及转载信息见文内详细说明,如有侵权,请联系 1278556902@qq.com 删除。

原始发表时间:2020-11-17

前言

如果你的站点有使用 Referer 标头收集网页的访问来源信息,则此策略变化可能对你的程序造成影响,请仔细阅读。

在开始阅读本文之前,如果你不理解 siteorigin之间的关系,请阅读:同站和同源你理解清楚了么?

Referer 标头

Referer请求头包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。

服务端一般使用 Referer请求头识别访问来源,可能会以此进行统计分析、日志记录以及缓存优化等。
在这里插入图片描述

这里有意思的一点:referer 实际上是 “referrer” 误拼写。Referrer-Policy 标头以及 JavaScript 中的 referrer 拼写是没有问题的。

Referer-Policy

Referer请求头可能暴露用户的浏览历史,涉及到用户的隐私问题。所以 HTTP 提供了 Referrer-Policy标头,其用来监管和限制哪些访问来源信息会在 Referer中发送(应该被包含在生成的请求当中)。
在这里插入图片描述

Referer-Policy包括以下几个可选项

  • no-referrer

整个 Referer首部会被移除。访问来源信息不随着请求一起发送。

  • no-referrer-when-downgrade (默认值)

在同等安全级别的情况下,引用页面的地址会被发送(HTTPS->HTTPS),但是在降级的情况下不会被发送 (HTTPS->HTTP)

  • origin

在任何情况下,仅发送文件的源作为引用地址。例如https://example.com/page.html会将 https://example.com/作为引用地址。

  • origin-when-cross-origin

对于同源的请求,会发送完整的URL作为引用地址,但是对于非同源请求仅发送文件的源。

  • same-origin

对于同源的请求会发送引用地址,但是对于非同源请求则不发送引用地址信息。

  • strict-origin

在同等安全级别的情况下,发送文件的源作为引用地址(HTTPS->HTTPS),但是在降级的情况下不会发送 (HTTPS->HTTP)

  • strict-origin-when-cross-origin

对于同源的请求,会发送完整的URL作为引用地址;在同等安全级别的情况下,发送文件的源作为引用地址(HTTPS->HTTPS);在降级的情况下不发送此首部 (HTTPS->HTTP)

  • unsafe-url

无论是同源请求还是非同源请求,都发送完整的 URL(移除参数信息之后)作为引用地址。

Referer-Policy 默认值

如果 Referer-Policy未设置任何策略,则使用浏览器的默认值。网站通常会遵循浏览器的默认设置。

对于导航和 iframe, Referer头中的数据也可以通过 JavaScript 使用 document.referrer访问。

no-referrer-when-downgrade 是跨浏览器的一种广泛的默认策略。但是现在,许多浏览器正处于向更多提高隐私的默认设置过渡的阶段。

Chrome 计划在85版开始 将其切换默认策略 no-referrer-when-downgrade更换到strict-origin-when-cross-origin

变化

strict-origin-when-cross-origin提供更多的隐私。有了这个政策,Referer 标头只会发送 origin

这样可以防止泄漏私人数据,这些数据可以从完整URL的其他部分(例如路径和查询字符串)访问。
在这里插入图片描述

例如,在一个跨域请求中:

https://site-one.example/stuff/detail?tag=red访问https://site-two.example/…

使用 no-referrer-when-downgrade: Referer: https://site-one.example/stuff/detail?tag=red
使用 strict-origin-when-cross-origin: Referer: https://site-one.example/

不变的

no-referrer-when-downgrade一样,strict-origin-when-cross-origin 在从 HTTPS 来源访问 HTTP 站点时,不会携带Referer头。
在相同的来源内,Referer标头值为完整的 URL 。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值