欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Chrome 新的默认 Referrer-Policy : strict-origin-when-cross-origin 有大用

如果你的站点有使用 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



来自  https://cloud.tencent.com/developer/article/1748911


普通分类: