很多开拓者知道这个字段,但是说不清它的详细细节。
本文详细先容该字段。

一、Referer 的含义

现实生活中,购买做事或加入会员的时候,每每哀求供应信息:\"大众你从哪里知道了我们?\公众

php伪造referer跳转http refere教程 SQL

这叫做引荐人(referrer),谁引荐了你?对付公司来说,这是很有用的信息。

互联网也是一样,你不会无缘无端访问一个网页,总是有人见告你,可以去那里看看。
做事器也想知道,你的\"大众引荐人\"大众是谁?

HTTP 协议在要求(request)的头信息里面,设计了一个Referer字段,给出\"大众引荐网页\公众的 URL。

这个字段是可选的。
客户端发送要求的时候,自主决定是否加上该字段。

很有趣的是,这个字段的拼写是错的。
Referer的精确拼写是Referrer,但是写入标准的时候,不知为何,没人创造少了一个字母r。
标准定案往后,只能将错就错,所有头信息的该字段都一律缺点拼写成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://www.ruanyifeng.com/blog/2019/06/http-referer.html