当前位置: 首页 > news >正文

【什么是 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.commozilla.org ⇒ 不同域名,跨源;
        • https 和 http ⇒ 两个不同协议,跨源;即便 域名一样,协议不同,也是跨源;
      • 同源:协议和域名,要一模一样;
        • 只有当两个 URL 的协议、域名和端口 都相同时,它们才被认为是同源的。如果其中任何一个元素不同,那么这两个URL就被认为是不同源的;没有标明 端口时,协议和域名要一模一样;
      • 源信息origin:协议+域名,不含路径;https://example.com/(去掉具体路径);
        • 源信息:协议、域名和端口(可省略 用默认值),不包含路径和查询参数。
      • 完整地址:协议+域名+路径;https://example.com/page.html
      • 来源地址:页面间跳转时,前一个页面的地址;
  • 示例

Referrer PolicyreferrerURL(来源地址:前一个页面 地址)current URL(当前地址:跳转到的新页面 地址)请求新页面资源时 发送的 Referrer 信息
不发送 访问者来源地址;
no-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.orghttps⇒ 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.orghttps ⇒ 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.orghttps⇒ 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 名
neverno-referrer
defaultthe default referrer policy
alwaysunsafe-url
origin-when-crossoriginorigin-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>
    

  • 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
      • 在搜索框输入查询,可以查询特性的浏览器支持,点击浏览器版本,还能看到具体支持情况;

  • 感谢:♥♥♥ 如果这篇文章 对您有帮助的话,可以点赞、评论、关注,鼓励下作者哦,谢谢小可爱们 ~╮( ̄▽ ̄)╭ ~
  • 喜欢请收藏:喜欢本文 可收藏哦,方便快捷,会持续进行 ❶ 知识点更新 及 ❷ 修正错误。
  • 欢迎指正: 如果发现 有需要 更正的细节问题,欢迎指正。

  • 转载 请评论告知作者 并注明出处 ,Thanks♪(・ω・)ノ
    • 作者:Hey_Coder
    • 来源:CSDN
    • 版权声明:本文为博主原创文章,转载请附上博文链接!
      在这里插入图片描述

相关文章:

  • project从入门到精通(四)
  • 智芯Z20K144x MCU开发之时钟架构
  • Git_idea界面进行分支合并到主分支详细操作
  • C++编程语言:标准库:标准库概观(Bjarne Stroustrup)
  • 半导体机器人赛道“领跑者”优艾智合:以创新驱动国产化替代加速度
  • Sourcetree安装使用的详细教程
  • 高拟人化客服机器人显著提升用户接受度
  • 第一天——贪心算法——分饼干
  • STM32F103RC中ADC1和ADC2通道复用
  • 关于AI 大数据模型的基础知识 杂记
  • 紧扣婴幼儿托育服务与管理实训室建设要点:评估与持续改进策略
  • WebSocket与Socket.IO实现简易客服聊天系统全解析
  • 力扣26——删除有序数组中的重复项
  • 特殊配合力(SCA)作为全基因组关联分析(GWAS)的表型,其生物学意义和应用价值
  • Uniapp Android/IOS 获取手机通讯录
  • MySQL SQL Mode及其说明
  • 4.3【LLaMA-Factory实战】教育大模型:个性化学习路径生成系统全解析
  • 4.2【LLaMA-Factory实战】金融财报分析系统:从数据到部署的全流程实践
  • pandas中的数据聚合函数:`pivot_table` 和 `groupby`有啥不同?
  • R1快开门式压力容器操作考试的实操技能考试有哪些注意事项?
  • 欧洲理事会前主席米歇尔受聘中欧国际工商学院特聘教授,上海市市长龚正会见
  • “上海之帆”巡展在日本大阪开幕,松江区组织企业集体出展
  • 迪拜金融市场CEO:2024年市场表现出色,超八成新投资者来自海外
  • 上海将发布新一版不予行政处罚清单、首份减轻行政处罚清单
  • 又一日军“慰安妇”制度受害者去世,大陆登记在册幸存者仅剩7人
  • 正荣地产:公司控股股东已获委任联合清盘人