之前对这个字段只有个模糊的认识,这两天集中实验了一下,一些概念也比较清楚了,记录一下。

首先,这个字段表明的是,当前请求来自何处。比如说如果从百度搜索的结果中,点击了到了新网页,这时的请求就会加上Referer字段,表明是从百度跳转来的。

但是这个字段有点古怪,而且并不是每一次跳转都会加上这个字段,另外这个字段是可以伪造的,所以不能尽信。

特性

根据实验,得出两个有趣的现象:

  • 通过http状态码来跳转(重定向),不会有此字段。

也就说,访问A页面,然而A页面返回302/301,Location:让你去B页面,这时候在B页面上,是不知道你从A页面来的。

  • 通过 JS 跳转会加上这个字段。在控制台中实验:window.location.href = '新页面地址' ,这是的跳转中会有此字段。

也就说,如果想让你的重定向有Referer字段,最好是通过js来跳转,输出一段js脚本,修改window.locaion.href, 等浏览器执行此代码时帮你跳转。

另一个值得关注的现象:通过图片、js脚本去加载的资源,请求中也会带上Referer参数,表明是从哪个站点请求的。


比如很多网站都会使用第三方统计服务,需要加载第三方js,此时会将Referer信息也加载头部,对方是能知道这个请求来自哪个站点(如果对方想的话)。

作用

  • 这就引出了Referer的一大作用:放盗链,特别是图片防盗链。在服务器上判断如果图片请求来自非正常的站点,则可以返回状态码502/404/403等等,或者直接返回一张此图片表明只供内部使用。

  • 加上前面说的,跳转点击会加上Referer信息,那么利用这一特性,可以实现网站统计服务:统计从搜索引擎来的流量(或者其他的来源网站),统计来源的搜索词等信息。

并不可靠

前面说到这个字段并不可靠,主要是这个字段是可以伪造的!(当然还有其他字段可以伪造,比如User-Agent)

比如你在后端发请求时,就可以像修改User-Agent一样轻易修改这个字段,以期骗过服务器的某些策略,或者制造某种假象。

比如在使用第三方统计服务时,有时候就发现来源网站这一栏中,有奇怪的网站,从未听过,更不可能在这类网站有外链,通常还有有些信息:SEO联系QQxxx之类的,无非就是广告。大概也是用的修改Referer的办法来做到的。