HTTP_REFERER的用途
HTTP_REFERER提供了引導用戶代理到當前頁的前一頁的地址信息,常見的一些應用場景有防盜鏈,統計文章有多少次是來自谷歌搜索結果,多少次來自百度搜索結果等。
下面以防盜鏈爲例,講講HTTP_REFERER的用法。
如果你經常寫博客,就一定會遇到盜用你辛辛苦苦整理過的文章不跟你打任何招呼甚至連原文鏈接都一併抹除的網站,文字這個層面我們沒法控制,但是圖片這個層面我們是可以控制的。舉個例子,如果你也曾複製過一些類似騰訊等網站的文章,你會發現黏貼下來發表之後經常出現圖片無法顯示,這是如何做到的呢?
場景:a站點的圖片全部存儲在c站點(雲服務器)上,c站點將識別調用方是否來自a站點,否則顯示一張錯誤圖片,b站是盜圖網站。
a站和b站的代碼一致,如下所示:
<img src="http://www.c.com/image.php?fname=jb.png" width="500px" height="500px" />;
1
重點是c站的代碼,如下所示:
<?php
if(strpos($_SERVER['HTTP_REFERER'], 'www.a.com') !== false){
//以下的寫法並不嚴謹,這裏只是做測試
if(file_exists($_GET['fname'])){
echo file_get_contents($_GET['fname']);
}
}
這樣當a站訪問時圖片可以正常顯示,而b站訪問時圖片是顯示不出來的。
什麼時候獲取不到HTTP_REFERER值
綜上所述,HTTP_REFERER存在需要兩個條件:
瀏覽器(客戶端)請求(服務器端請求的情況下,是不存在HTTP_REFERER的,但是可以僞造header,這在下一節中將提及);
存在前導頁;
以下是網友收集的獲取不到HTTP_REFERER值的情況:
在瀏覽器內直接敲URL
windows桌面上的超鏈接圖標
瀏覽器內書籤
第三方軟件(如Word,Excel等)內容中的鏈接
SSL認證網站跳入
http://example.com/“> meta頁面設置自動跳轉時,在example.com將取不到REFERER URL
使用JavaScript的Location.href或者是Location.replace()
在以下情況下可以獲取HTTP_REFERER值:
直接用
form提交的表單(POST或GET)
src請求(如js的script標籤及html中img標籤的src屬性)
去掉 REFERER的方法
<iframe src="auto-refresh.html" width=500 height=500 rel="noreferrer"></iframe>
<html> <head> <meta name="referrer" content="never"> <meta http-equiv="refresh" content="0;url=http://xxx.xxx.xxx"> </style> </head> <body></body> </html>