【什么是 Referrer Policy ?(详解:来源地址策略;访客从哪里来)】
什么是 Referrer Policy ?
- 1. 什么是 Referrer Policy ?
- 2. Referrer Policy 的常用值
- 3. Referrer(来源信息) 的使用示例
- ♣ 结束语 和 友情链接
1. 什么是 Referrer Policy ?
- 什么是
Referrer Policy
?- 来源地址 策略:
Referrer Policy
是一个 HTTP 头部字段; - 用于:控制浏览器发送到服务器的 访问者来源地址 HTTP Referrer 字段 (= 页面跳转时,前一个页面的地址)。
- 这个字段 告诉服务器:用户是 “从哪个页面 链接过来”的,发送请求的访问者 来源页面 URL,是前一个网页的 URL。
- 比如 我们在 CSDN 中浏览某个博客,突然 点击博客中的一个链接,这就是 在请求其他资源,这个时候 要跳转到新页面,如果想告诉 新页面的服务器 是谁在请求资源,该怎么操作?可以 通过 HTTP Referrer 字段 来控制;
Referrer Policy
允许网站管理员 精细控制跨域请求时 发送的 Referrer 值。
- 来源地址 策略:
HTTP 来源地址(referer,或 HTTP referer)是 HTTP 表头的一个字段,用来表示 【从哪儿 链接到目前的网页】,采用的格式是 URL。换句话说,借着 HTTP 来源地址,目前的网页 可以检查【访客 从哪里而来】,这也常被用来 对付伪造的跨网站请求。 而 dereferer 则是将 HTTP 来源地址信息剥离,所以网站将无法识别 访客从何而来。
拼写问题
Referer 的正确英语拼法是 referrer美/ri’fə:rə/,推荐人。这是早期 HTTP 规范当中存在的拼写错误,后来为保持向下兼容 将错就错。例如 DOM Level 2[1]、Referrer Policy[2] 等其他网络技术的规范 曾试图修正此问题,使用正确拼法,导致目前拼法并不统一。
概念与功能
当访客访问网页时,HTTP 来源地址(referer 或 referring page)是 【前一个网页的 URL】。
如果是图片的话,通常指的就是 图片所在的网页。
在网页浏览器 送往网页服务器的时候,HTTP 来源地址 就被包含在 HTTP 请求方法中。网站会将来源地址记录 以便追踪用户的动态或进行统计,大部分分析软件 也都会处理这个信息。
但因 来源地址信息 可能会带来隐私权问题,不少网页浏览器 允许用户设置 不要提交这个信息,有些代理服务器和防火墙 也会将来源地址信息过滤掉,以避免外部 获知非公开的网络地址。
缺少引用地址信息 有可能会造成某些使用问题:
某些服务器 会因为缺少正确的来源地址信息 而进行阻挡,以避免 未经授权的图片引用(图像防盗链)或是 其他对服务器有影响的行为。
针对这样的阻挡,有些软件 还提供了针对特定网站 提交“假来源地址”的功能(反防盗链)。
2. Referrer Policy 的常用值
Referrer Policy
有几种不同的值,每种值 定义了不同情况下 Referrer 字段的行为:- 页面间跳转时
- referrerURL(来源地址):前一个页面 地址;
- current URL(当前地址):跳转到的新页面 地址;
- Referrer Policy(来源地址 策略):前一个页面 在请求新页面资源时,浏览器 是否发送/如何发送 来源地址信息
- 页面间跳转时
简述 | Referrer 头部 | 详解 |
---|---|---|
❶ 完全不发送 访问者来源地址 Referrer 字段; | no-referrer /ri’fə:rə/ | 完全不发送 来源地址 Referrer 字段。 Referer 头 将被完全省略。 不将 referrer 信息与请求一起发送到任何源。 整个 Referrer 首部会被移除。访问来源信息 不随着请求一起发送。 意味着:在任何情况下,链接到其他页面或资源的请求中,都不会包含 Referer 信息。用途:这种设置 通常用于 增强用户隐私保护,因为它可以防止用户访问的当前页面地址 被泄露给其他网站。这在 处理敏感信息 或用户隐私至关重要的应用中 非常有用。 |
❷ 安全降级时: 不发送 访问者来源地址 Referrer 字段; 安全未降级:发送完整来源地址; | no-referrer-when-downgrade /ˌdaʊnˈɡreɪd/ | 只有当请求的 URL 是同等安全 或者更安全的协议(比如 从 http⇒ http,https ⇒ https,http ⇒ https)时,才会发送 Referrer 字段。 如果请求的 URL 协议安全性降低(比如从 https ⇒ http),则不发送 Referrer 字段。 用途:这样的设置 有助于保护用户隐私,同时在必要时 仍然提供访问者信息。 |
❸ 只发 源信息; 源信息:来源地址的“协议+域名”,去掉路径; | origin /ˈɔːrɪdʒɪn/ | 只发送 Referrer 字段的源信息(协议+域名),不包括 路径信息。 不管是否跨源和降级:当设置为 origin 时,无论请求的目标地址 是同源还是跨源,也无论请求是升级 还是降级安全协议,浏览器都只会发送 当前文档的源信息:协议和域名(origin),而不会发送 完整的 URL 路径和查询参数。用途:这种设置 有助于保护用户的隐私,因为它不会泄露 用户在当前页面上的具体活动细节,只提供协议和域名信息。 |
❹ 跨源:只发源信息; 同源:发完整来源地址; | origin-when-cross-origin | 当请求是同源的,发送完整的 Referrer 字段;当请求是跨域的,只发送源信息。 用途:这样的设置有助于 在保护用户隐私的同时,对内部导航 保持一定的透明度。 |
❺ 同源:发完整地址; 跨源: 不发地址; | same-origin | 只有当请求是同源的,才会发送完整的 Referrer 字段;如果是跨域的,则不发送。 用途:这样的设置有助于 在保护用户隐私的同时,对内部导航 保持一定的透明度。 |
❻ 协议不降级:才发源信息; 协议降级:不发地址; | strict-origin | 类似于 origin ,发源信息,但是当请求的 URL 协议安全性降低时,也不发送 源信息。所以,加一个 strict 指的就是 协议的安全等级 不能降级,降级了 就不发了;这种设置可以 在保护用户隐私的同时,对于同等级 或更安全协议的请求 仍然提供域名信息,而对于降级到不安全协议的请求 则不发送任何 访问者的信息。 用途:在保护用户隐私的同时,对同样安全 或更安全的请求 保持一定的透明度。 |
❼ 跨源+协议安全不降级:才发源信息; 跨源+协议安全降级:不发地址; 同源:发完整来源地址; | strict-origin-when-cross-origin (默认值) | 类似于 origin-when-cross-origin ,跨源发源信息,但是当请求的 URL 协议安全性降低时,也不发送 源信息。所以,加一个 strict 指的就是 协议的安全等级 不能降级,降级了 就不发了; |
❽ 发送 完整来源地址; 不管是否跨源,也不管协议是否降级; | unsafe-url (不推荐使用;特殊需求除外) | 无论请求是否跨源,协议是否降级,都会发送完整的 Referrer 字段,包括路径和查询字符串。 注意:这种设置可能会 导致用户隐私泄露,因此只有在 充分理解风险 并确实需要时才使用。 |
- 通过设置
Referrer Policy
,网站可以保护用户隐私,防止敏感信息泄露,同时也能减少 因 Referrer 字段引起的安全问题。
3. Referrer(来源信息) 的使用示例
-
Referrer 信息:是谁在请求资源?访问者是谁?
- 点击网页中的链接 会进行页面间跳转,在从一个网页 跳转到另一个新网页时,需要先请求 新网页的资源,服务器收到请求后 给与响应,发送新网页的资源回来,我们才能看到新网页,而发送请求时 是否要发送访问信息(来源地址:前一个页面的地址),让服务器知道 是谁在请求资源,访问者是谁?可以 通过 Referrer 信息 来控制;
- 协议和域名
- https(=协议): //example.com/(=域名)page.html(=路径)
- 跨源:协议和域名,有一个不一样,就是跨源;
example.com
和mozilla.org
⇒ 不同域名,跨源;- https 和 http ⇒ 两个不同协议,跨源;即便 域名一样,协议不同,也是跨源;
- 同源:协议和域名,要一模一样;
- 只有当两个 URL 的协议、域名和端口 都相同时,它们才被认为是同源的。如果其中任何一个元素不同,那么这两个URL就被认为是不同源的;没有标明 端口时,协议和域名要一模一样;
- 源信息
origin
:协议+域名,不含路径;https://example.com/
(去掉具体路径);- 源信息:协议、域名和端口(可省略 用默认值),不包含路径和查询参数。
- 完整地址:协议+域名+路径;
https://example.com/page.html
- 来源地址:页面间跳转时,前一个页面的地址;
- 协议和域名
- 点击网页中的链接 会进行页面间跳转,在从一个网页 跳转到另一个新网页时,需要先请求 新网页的资源,服务器收到请求后 给与响应,发送新网页的资源回来,我们才能看到新网页,而发送请求时 是否要发送访问信息(来源地址:前一个页面的地址),让服务器知道 是谁在请求资源,访问者是谁?可以 通过 Referrer 信息 来控制;
-
示例
Referrer Policy | referrerURL(来源地址:前一个页面 地址) | current URL(当前地址:跳转到的新页面 地址) | 请求新页面资源时 发送的 Referrer 信息 |
---|---|---|---|
❶ 不发送 访问者来源地址;
| https://example.com/page.html → | 任何网址 (any domain or path) | 不发送 来源地址; no referrer; |
❷ 安全降级:不发送; 安全未降级:发送完整地址; no-referrer-when-downgrade | https://example.com/page.html → | https://example.com/otherpage.html | https⇒ https; 安全未降级,发送完整来源地址; https://example.com/page.html |
https://example.com/page.html → | https://mozilla.org | https⇒ https; 安全未降级,发送完整来源地址;https://example.com/page.html | |
https://example.com/page.html → | http://example.org | https⇒ http; 安全降级了,不发送地址; no referrer; | |
❸ 只发源信息(协议+域名);origin | https://example.com/page.html → | 任何网址(any domain or path) | 只发源信息(协议+域名,无路径); https://example.com/ |
❹ 跨源:只发源信息(协议+域名;无路径); 同源:发完整地址; origin-when-cross-origin | https://example.com/page.html → | https://example.com/otherpage.html | https://example.com⇒ https://example.com; 同源,发完整地址; https://example.com/page.html |
https://example.com/page.html → | https://mozilla.org | https://example.com⇒ https://mozilla.org; 域名变了,跨源,只发源信息(协议+域名); https://example.com/ | |
https://example.com/page.html → | http://example.com/page.html | https⇒ http; 协议安全降级了,跨源,只发源信息; https://example.com/ | |
❺ 协议不降级:才发源信息; 协议降级:不发地址; strict-origin | https://example.com/page.html → | https://mozilla.org | https⇒ https; 协议未降级,发送源信息; https://example.com/ |
https://example.com/page.html → | http://example.org | https ⇒ http; 协议降级,不发送地址;no referrer | |
http://example.com/page.html → | any domain or path | http⇒ https、http; 本身不安全协议(因为不会再降级),都发送源信息; http://example.com/ | |
❻ 跨源+协议安全不降级:只发源信息; 跨源+协议安全降级:不发地址; 同源:发完整来源地址; strict-origin-when-cross-origin | https://example.com/page.html → | https://example.com/otherpage.html | https://example.com⇒ https://example.com; 同源:发完整来源地址; https://example.com/page.html |
https://example.com/page.html → | https://mozilla.org | https://example.com⇒ https://mozilla.org; 域名不同,跨源,协议相同,不降级,只发源信息; https://example.com/ | |
https://example.com/page.html → | http://example.org | https⇒ http; 协议不同,且协议降级,不发送地址; no referrer; | |
❼ 同源:发完整地址; 跨源:不发地址; same-origin | https://example.com/page.html → | https://example.com/otherpage.html | https://example.com⇒ https://example.com; 协议、域名一样,同源,发完整地址; https://example.com/page.html |
https://example.com/page.html | https://mozilla.org | example.com⇒ /mozilla.org; 域名不一样,跨源,不发送地址; no referrer; | |
❽ 发送 完整来源地址; 不管是否跨源,也不管协议是否降级; unsafe-url | https://example.com/page.html → | 任何网址(any domain or path) | 发送 完整来源地址; https://example.com/page.html |
- 总结
- 2个:不发、降级不发;
- 4个:只发源、跨源只发源、不降级才发源、跨源+不降级 才发源;
- 2个:同源发完整、都发完整;
- 遗留值 问题:如果
name
属性值 是下表第一列给出的值之一,则将 值设置为 第二列给出的值:- 在HTML中,“legacy/ˈleɡəsi/ value” 通常指的是一些过时的、不再推荐使用的值,它们可能与旧的规范或特性有关。这些值可能仍然被支持 以确保向后兼容性,但它们并不是最佳实践,也不应该在新的代码中使用。
遗留值(Legacy value) | 对应的 标准 Referrer policy 名 |
---|---|
never | no-referrer |
default | the default referrer policy |
always | unsafe-url |
origin-when-crossorigin | origin-when-cross-origin |
- 例:csdn 就使用了 一个
content="always"
,不是标准的 referrer policy 名称,直接使用content="unsafe-url"
会更好;
-
来源地址策略 referrer policy 的使用
-
① 在 HTML 中 设置 来源地址策略 referrer policy
- ❶ 为整个文档设置 来源地址 referrer 策略:可以用一个
name="referrer"
的<meta>
元素 。
<meta name="referrer" content="origin" />
- ❷ 在单个元素上 设置独立的 来源地址 referrer 策略
- 在
<a>
、<area>
、<img>
、<iframe>
、<script>
、<link>
元素上 设置referrerpolicy
属性。 - 在
<a>
、<area>
、<link>
元素上 设置rel
属性 设置为noreferrer
。
- 在
<a href="http://example.com" referrerpolicy="origin">…</a>
<a href="http://example.com" rel="noreferrer">…</a>
- ❶ 为整个文档设置 来源地址 referrer 策略:可以用一个
- ② HTTP :指定 后备的 来源地址 referrer 策略
- 如果 在策略未获广泛的浏览器支持的情况下 指定一种后备策略,使用 逗号分隔 的列表,并将 希望使用的策略 放在最后:
- 如下,
no-referrer
仅在strict-origin-when-cross-origin
不被浏览器支持的情况下 被使用。
Referrer-Policy: no-referrer, strict-origin-when-cross-origin
♣ 结束语 和 友情链接
-
快速搜索:涉及知识点比较多,看过之后忘了很正常,想查询时,请按
Ctrl+F
快速搜索关键字哦 (* ̄︶ ̄)。- 搜索后,多次按下 enter 键 ,或搜索框后的 上下箭头,就能在关键词之间快速跳转。
-
参考文档
-
HTML 规范文档:HTML Standard
- 更全面;
- 如果学到某个知识点 觉得困惑和冲突,可以直接看 规范文档,这是最标准;进入后 Ctrl + F ,直接搜关键词 快速定位要看的知识点;
-
HTML 规范文档(开发者版本):HTML Standard, Edition for Web Developers ;
- 去掉了 用户代理部分的详解,更简洁;
-
WHATWG 标准文档: Standards — WHATWG ;
-
CSS 规范文档:Cascading Style Sheets ;
-
- 友情链接
- MDN Web Docs
- 在搜索框输入查询,可以看详细知识点,也可以文章的最下方看到浏览器支持,点击浏览器版本,还能看到具体支持情况;
- Can I use… Support tables for HTML5, CSS3, etc
- 在搜索框输入查询,可以查询特性的浏览器支持,点击浏览器版本,还能看到具体支持情况;
- MDN Web Docs
- 感谢:♥♥♥ 如果这篇文章 对您有帮助的话,可以点赞、评论、关注,鼓励下作者哦,谢谢小可爱们 ~╮( ̄▽ ̄)╭ ~
- 喜欢请收藏:喜欢本文 可收藏哦,方便快捷,会持续进行 ❶ 知识点更新 及 ❷ 修正错误。
- 欢迎指正: 如果发现 有需要 更正的细节问题,欢迎指正。
- 转载 请评论告知作者 并注明出处 ,Thanks♪(・ω・)ノ
- 作者:Hey_Coder
- 来源:CSDN
- 版权声明:本文为博主原创文章,转载请附上博文链接!