http 之 referer 以及防盗链 策略研究

我们知道,http referer是一次http请求中的head请求中的一部分信息;

当浏览器从给服务端发送一次请求的时候,一般会带上Referer,告诉服务器

我是从哪个页面链接过来的,举一个时间的例子:

比如有一个网站或页面:

http://www.example.com/a.html

该页面中有一个超链接:

<a href='http://www.example.com/server.php'>点击</a>

在服务器的server.php中我们可以加上调试信息,把整个$_SERVER打印出来,如

var_dump($_SERVER);

当我们在浏览器请求上述页面并渲染后,我们点击此a链接;

整个时候浏览器会请求到服务端server.php,并显示出服务端的输出,其中就包括HTTP_REFERER字段,我们看到它的值是:

["HTTP_REFERER"] => string(50) "http://www.example.com/a.html"
很明了,看到该请求是从a.html页面链接过来的;

所以,referer常常被用来统计用户来源,比如www.hao123.com中有好多门户官网的链接;当我们点击“京东”的时候,京东的服务端就可以发现 当前该用户请求是从www.hao123.com中链接过来的,就可以很方便的统计到用户来源;

额外地,referer也常常被用来做防盗链的使用;

比如某个网站的图片是保存在图片服务器或者云端,假如地址为:

http://static.yun.com/img.jpg

我们可以在此图片服务器的服务端配置referer 的值,比如可以配置为

http://example.com/

那么,这样子的话,就仅仅用于从http://example.com/中链接过来的请求访问此图片.

可以有效防止别的网站盗用此图片。当然referer也可以被伪造或模拟,但是这样至少可以防止部分的盗链;

在熟悉了上面关于referer的原理以及基本的用途之后,下面我们讲讲在页面的header 头中的meta信息中如果自定义的控制referer的值:

meta中的referrer参数可以设置为以下几种类型的值:

1.never

2.always

3.origin

4.default

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

当浏览器发起http请求的时候,会按照content的值而做出具体的反应:

1.如果 referer-policy 的值为never:删除 http head 中的 referer;

2.如果 referer-policy 的值为default:如果当前页面使用的是 https 协议,而正要加载的资源使用的是普通的 http 协议,则将 http header 中的 referer 置为空;

3.如果 referer-policy 的值为 origin:只发送 origin 部分;

4.如果 referer-policy 的值为 always:不改变http header 中的 referer 的值,注意:这种情况下,如果当前页面使用了 https 协议,而要加载的资源使用的是 http 协议,加载资源的请求头中也会携带 referer


以上4种情况,我没有做一一的细测,大家敢兴趣可以一一测试一下即可,比如:

<html>
<head>
<meta name="referrer" content="origin">
</head>
<a href='http://xxx.xxxx.com/index.php/Test/jordytest'>点击</a>
</html>







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值