Referer是HTTP请求header
的一部分,当浏览器(或者模拟浏览器行为)向web
服务器发送请求的时候,头信息里有包含Referer 。好比我在www.xxxx.com
里有一个www.baidu.com
连接,那么点击这个www.baidu.com
,它的header
信息里就有:Referer=https://www.xxxx.com信息php
1.防盗链html
那么能够利用这个来防止盗链了,好比我只容许我本身的网站访问我本身的图片服务器,那个人域名是www.xxx.com
,那么图片服务器每次取到Referer来判断一下是否是我本身的域名www.xxxx.com
,若是是就继续访问,不是就拦截。 web
2.防止恶意请求。api
好比个人网站上,静态请求是*.html
结尾的,动态请求是*.shtml
,那么由此能够这么用,全部的*.shtml
请求,必须 Referer 为我本身的网站。浏览器
3.空Referer是怎么回事?什么状况下会出现Referer?服务器
首先,咱们对空 Referer 的定义为, Referer 头部的内容为空,或者,一个 HTTP 请求中根本不包含 Referer 头部。curl
那么何时 HTTP 请求会不包含 Referer 字段呢?根据Referer的定义,它的做用是指示一个请求是从哪里连接过来,那么当一个请求并非由连接触发产生的,那么天然也就不须要指定这个请求的连接来源。post
好比,直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含 Referer 字段的,由于这是一个“凭空产生”的 HTTP 请求,并非从一个地方连接过去的。网站
4.那么在防盗链设置中,容许空Referer和不容许空Referer有什么区别?url
容许 Referer 为空,意味着你容许好比浏览器直接访问,就是空。
Refere不可靠,但有部分做用,起码增长了爬图难度和成本,由于在浏览器端你是没法指定(伪造),你只能经过定义meta元素告诉浏览器怎么用
<meta name="referrer" content="never">
content有以下值:
只能在服务器端指定,Refere参数位置在$_SERVER['HTTP_REFERER']
4.1>CURL方法
function curl_post($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_REFERER, 'http://www.baidu.com'); $output = curl_exec($ch); curl_close($ch); return $output; }
4.2》file_get_contents方法
$opts = array( 'http'=>array( 'method'=>"GET", 'header'=>"Referer: http://www.baidu.com" ) ); $context = stream_context_create($opts); var_dump(file_get_contents('http://www.c.com/api.php', false, $context));