【什么是 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
- 版权声明:本文为博主原创文章,转载请附上博文链接!
  
 

