是什么

HTTP 请求的头信息里面,Referer 是一个常见字段,提供访问来源的信息

Referer 的发生场景

浏览器向服务器请求资源的时候,Referer字段的逻辑是这样的,用户在地址栏输入网址,或者选中浏览器书签,就不发送Referer字段

主要是以下三种场景,会发送Referer字段。

(1)用户点击网页上的链接。

(2)用户发送表单。

(3)网页加载静态资源,比如加载图片、脚本、样式。


<!-- 加载图片 -->
<img src="foo.jpg">
<!-- 加载脚本 -->
<script src="foo.js"></script>
<!-- 加载样式 -->
<link href="foo.css" rel="stylesheet">

上面这些场景,浏览器都会将当前网址作为Referer字段,放在 HTTP 请求的头信息发送。

浏览器的 JavaScript 引擎提供document.referrer属性,可以查看当前页面的引荐来源。注意,这里采用的是正确拼写。

Referer 的作用

Referer字段实际上告诉了服务器,用户在访问当前资源之前的位置。这往往可以用来用户跟踪。

一个典型的应用是,有些网站不允许图片外链,只有自家的网站才能显示图片,外部网站加载图片就会报错。它的实现就是基于Referer字段,如果该字段的网址是自家网址,就放行。

由于涉及隐私,很多时候不适合发送Referer字段。

这里举两个例子,都不适合暴露 URL。一个是功能 URL,即有的 URL 不要登录,可以访问,就能直接完成密码重置、邮件退订等功能。另一个是内网 URL,不希望外部用户知道内网有这样的地址。Referer字段很可能把这些 URL 暴露出去。

此外,还有一种特殊情况,需要定制Referer字段。比如社交网站上,用户在对话中提到某个网址。这时,不希望暴露用户所在的原始网址,但是可以暴露社交网站的域名,让对方知道,是我贡献了你的流量。

rel属性

由于上一节的原因,浏览器提供一系列手段,允许改变默认的Referer行为。

对于用户来说,可以改变浏览器本身的全局设置,也可以安装浏览器扩展。这里就不详细介绍了。

对于开发者来说,rel="noreferrer"属性是最简单的一种方法。<a><area><form>三个标签可以使用这个属性,一旦使用,该元素就不会发送Referer字段。


<a href="..." rel="noreferrer" target="_blank">xxx</a>

上面链接点击产生的 HTTP 请求,不会带有Referer字段。

注意,rel="noreferrer"采用的是正确的拼写。

Referrer Policy 的值

rel属性只能定制单个元素的Referer行为,而且选择比较少,只能发送或不发送。W3C 为此制定了更强大的 Referrer Policy。

Referrer Policy 可以设定8个值。

(1)no-referrer

不发送Referer字段。

(2)no-referrer-when-downgrade

如果从 HTTPS 网址链接到 HTTP 网址,不发送Referer字段,其他情况发送(包括 HTTP 网址链接到 HTTP 网址)。这是浏览器的默认行为。

(3)same-origin

链接到同源网址(协议+域名+端口 都相同)时发送,否则不发送。注意,https://foo.com链接到http://foo.com也属于跨域。

(4)origin

Referer字段一律只发送源信息(协议+域名+端口),不管是否跨域。

(5)strict-origin

如果从 HTTPS 网址链接到 HTTP 网址,不发送Referer字段,其他情况只发送源信息。

(6)origin-when-cross-origin

同源时,发送完整的Referer字段,跨域时发送源信息。

(7)strict-origin-when-cross-origin

同源时,发送完整的Referer字段;跨域时,如果 HTTPS 网址链接到 HTTP 网址,不发送Referer字段,否则发送源信息。

(8)unsafe-url

Referer字段包含源信息、路径和查询字符串,不包含锚点、用户名和密码。

Referrer Policy 的用法

Referrer Policy 有多种使用方法。

(1)HTTP 头信息

服务器发送网页的时候,通过 HTTP 头信息的Referrer-Policy告诉浏览器。


Referrer-Policy: origin

(2)<meta>标签

也可以使用<meta>标签,在网页头部设置。


<meta name="referrer" content="origin">

(3)referrerpolicy属性

<a><area><img><iframe><link>标签,可以设置referrerpolicy 属性。


<a href="..." referrerpolicy="origin" target="_blank">xxx</a>

退出页面重定向

还有一种比较老式的技巧,但是非常有效,可以隐藏掉原始网址,谷歌和 Facebook 都在使用这种方法。

链接的时候,不要直接跳转,而是通过一个重定向网址,就像下面这样。


<a  href="/exit.php?url=http%3A%2F%2Fexample.com">Example.com</a>

上面网址中,先跳转到/exit.php,然后再跳转到目标网址。这时,Referer字段就不会包含原始网址。

理解HTTP Referer相关推荐

  1. Referer的理解及防盗链

    HTTP请求的头信息里面,Referer是一个常见字段,提供访问来源的信息.很多开发者知道这个字段,但是说不清它的具有细节.本文详细介绍该字段. 一.Referer的含义 现实生活中,购买服务或加入会 ...

  2. NETGEAR拒绝连接请求_3分钟理解HTTP的请求与响应

    HTTP和HTTPS HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法. HTTPS(Hypertext Transfer ...

  3. 理解HTTP消息头【很完整,例子也很丰富】

    (一)初识HTTP消息头 但凡搞WEB开发的人都离不开HTTP(超文本传输协议),而要了解HTTP,除了HTML本身以外,还有一部分不可忽视的就是HTTP消息头. 做过Socket编程的人都知道,当我 ...

  4. 深入理解 RPC 之集群篇

    上一篇文章分析了服务的注册与发现,这一篇文章着重分析下 RPC 框架都会用到的集群的相关知识. 集群(Cluster)本身并不具备太多知识点,在分布式系统中,集群一般涵盖了负载均衡(LoadBalan ...

  5. 深入理解HTML协议

    http协议学 习系列 1. 基础概念篇 1.1 介绍   HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide We ...

  6. 从敲入 URL 到浏览器渲染完成、对HTTP协议的理解

    1. 大致过程 当你这样子回答的时候: 用户输入 url 地址,浏览器查询 DNS 查找对应的请求 IP 地址 建立 TCP 连接 浏览器向服务器发送 http 请求,如果服务器段返回以 301 之类 ...

  7. 深入理解HTTP协议、HTTP协议原理分析

    超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为了提供一种发布和接 ...

  8. nstall.php a data,通过Typecho install.php 后门理解PHP对象注入 - 嘶吼 RoarTalk – 回归最本质的信息安全,互联网安全新媒体,4hou.com...

    刚好在学习PHP反序列化,听说有这么个后门,尝试着分析下,可能有写的不对的地方,还请指教.首先介绍下序列化与反序列化.序列化是对象串行化,对象是一种在内存中存储的数据类型,寿命随生成该对象的程序的终止 ...

  9. DotnetSpider (一) 架构的理解、应用、搭建

    本文连接:http://www.cnblogs.com/grom/p/8931650.html 受业务影响,决定将Downloader单独分层,做出修改. 最近在做爬虫,之前一直在使用 HttpWeb ...

最新文章

  1. C 函数别名简单记录
  2. 解决安卓微信浏览器中location.reload 或者 location.href失效的问题
  3. 识别字符串中的表达式
  4. 【OF框架】使用OF.WinService项目,添加定时服务,进行创建启动停止删除服务操作...
  5. Hbase hbck2下载编译和基本使用
  6. android 查找字符在字符串的位置
  7. How is an SAP OData Batch request handled in the backend
  8. Linux 网络编程八(epoll应用--大并发处理)
  9. 云计算将会让数据中心消失?
  10. Sql Server参数化查询之where in和like实现之xml和DataTable传参
  11. Flutter实现倒计时功能
  12. UML2.0 学习笔记
  13. oralce修改密码教程
  14. 实体店如何做好门店引流
  15. atitit.导航的实现最佳实践and声明式编程
  16. 《华为工作法》8 自我提升的华为人
  17. 绝妙一招 教你如何拍出烟雾缥缈的作品
  18. 联想Y470 非虚拟机安装苹果Mac OS X Mavericks 10.9.1教程详解(文字+图片),通俗易懂亲自动手——序列二之镜像写入,引导建立
  19. 多态的概念简单明了,易掌握,易理解!
  20. 唯美手绘美女 性感蝴蝶天使 仙女 金发女郎

热门文章

  1. p5js动漫角色临摹
  2. 解决百度网盘下载慢的方案
  3. SAP Marketing Cloud 功能概述(三)
  4. AWVS批量扫描-妈妈再也不用担心我不会用awvs批量扫描了
  5. 图形界面介绍Create Size Blockage
  6. 如何关闭华为自动杀进程_如何彻底关闭windows 10的 自动更新
  7. 流程审批: 有个人不走申请人直属领导审批,审批流程设定(设定条件,矩阵相关)
  8. Dual Contrastive Learning: Text Classification via Label-Aware Data Augmentation 阅读笔记
  9. 让Windows2000飞起来(转)
  10. LaTeX 公式左对齐与右对齐