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));