Referer是HTTP请求header的一部分,当浏览器(或者模拟浏览器行为)向web服务器发送请求的时候,头信息里有就会包含 Referer,记录请求是从哪里来的。

Referer的作用?

1.防盗链

比如我只允许我自己的网站访问我自己的图片服务器,那我的域名是www.situdata.com,那么图片服务器每次取到Referer来判断一下是不是我自己的域名www.situdata.com,如果是就继续访问,不是就拦截。
这是不是就达到防盗链的效果了?将这个http请求发给服务器后,如果服务器要求必须是某个地址或者某几个地址才能访问,而你发送的referer不符合他的要求,就会拦截或者跳转到他要求的地址,然后再通过这个地址进行访问。

2.防止恶意请求

比如静态请求是.html结尾的,动态请求是.shtml,那么由此可以这么用,所有的*.shtml请求,必须 Referer 为我自己的网站。

空Referer是怎么回事?什么情况下会出现Referer?

首先,我们对空Referer的定义为, Referer 头部的内容为空,或者一个HTTP请求中根本不包含 Referer 头部。
那么什么时候HTTP请求会不包含 Referer 字段呢?根据Referer的定义,它的作用是指示一个请求是从哪里链接过来,那么当一个请求并不是由链接触发产生的,那么自然也就不需要指定这个请求的链接来源。
比如,直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含Referer 字段的,因为这是一个“凭空产生”的 HTTP 请求,并不是从一个地方链接过去的。

阿里云OSS配置防盗链

  1. location /oss/ {
  2. if ( $http_referer !~* "situdata.com") {
  3. return 403;
  4. }
  5. proxy_set_header Host citic-pru.oss-cn-beijing.aliyuncs.com;
  6. proxy_pass https://citic-pru.oss-cn-beijing.aliyuncs.com/;
  7. }

①proxy_pass的值 http://xxxx.oss-cn-beijing.aliyuncs.com 和/oss/后面必须跟/。
②正则匹配referer中包含situdata.com才可以访问。
③不要加上proxy_set_header Host $host;否则会无法访问。