什麼是HTTP Referer

轉自:http://jbg168.blog.163.com/blog/static/9968362010810111249944/ 

HTTP Referer是header的一部分,當瀏覽器向web服務器發送請求的時候,一般會帶上Referer,告訴服務器我是從哪個頁面鏈接過來的,服務器籍此可以獲得一些信息用於處理。比如從我主頁上鍊接到一個朋友那裏,他的服務器就能夠從HTTP Referer中統計出每天有多少用戶點擊我主頁上的鏈接訪問他的網站。

Referer其實應該是英文單詞Referrer,不過拼錯的人太多了,所以編寫標準的人也就將錯就錯了。

我的問題
我剛剛把feed閱讀器改變爲Gregarius,但他不像我以前用的liferea,訪問新浪博客的時候,無法顯示其中的圖片,提示“此圖片僅限於新浪博客用戶交流與溝通”,我知道,這就是HTTP Referer導致的。

From https to http
我還發現,從一個https頁面上的鏈接訪問到一個非加密的http頁面的時候,在http頁面上是檢查不到HTTP Referer的,比如當我點擊自己的https頁面下面的w3c xhtml驗證圖標(網址爲http://validator.w3.org/check?uri=referer),從來都無法完成校驗,提示:

No Referer header found!

原來,在http協議的rfc文檔中有定義:

因爲源連接可能是私有信息,或者是可能泄露其它私有信息源,強烈建議用戶能夠選擇是否發送referer域。例如,瀏覽器客戶端可能有切換選項來公開、匿名瀏覽,講相應的允許、發送refererfrom信息。

如果通過安全協議傳輸,客戶端不應該在http請求中包括referer域。但是咱們的NTA是包括的。


Firefox中關於Referer的設置
都在裏,有兩個鍵值:

network.http.sendRefererHeader (default=2)
設置Referer的發送方式,0爲完全不發送,1爲只在點擊鏈接時發送,在訪問頁面中的圖像什麼的時候不發送,2爲始終發送。參見Privacy Tip #3: Block Referer Headers in Firefox

network.http.sendSecureXSiteReferrer (default=true)
設置從一個加密頁訪問到另外一個加密頁的時候是否發送Referer,true爲發送,false爲不發送。

利用Referer防止圖片盜鏈
雖然Referer並不可靠,但用來防止圖片盜鏈還是足夠的,畢竟不是每個人都會修改客戶端的配置。實現一般都是通過apache的配置文件,首先設置允許訪問的地址,標記下來:

# 只允許來自domain.com的訪問,圖片可能就放置在domain.com網站的頁面上
SetEnvIfNoCase Referer "^http://www.domain.com/" local_ref
# 直接通過地址訪問
SetEnvIf Referer "^$" local_ref

然後再規定被標記了的訪問才被允許:

<FilesMatch ".(gif|jpg)">
Order Allow,Deny
Allow from env=local_ref
</FilesMatch>

或者

<Directory /web/images>
   Order Deny,Allow
   Deny from all
   Allow from env=local_ref
</Directory>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章