HTTP Referer是header的一部分,當瀏覽器向web伺服器傳送請求的時候,一般會帶上Referer,告訴伺服器我是從哪個頁面連結過來的,伺服器基此可以獲得一些信息用於處理。
基本介紹
- 外文名:HTTP_REFERER
- 類型:header的一部分
- 功能:計算網頁上的連結訪問量
- 範圍:計算機
- 隸屬:網路程式語言
簡介,防外鏈代碼例子(C#),
簡介
簡而言之,HTTP Referer是header的一部分,當瀏覽器向web伺服器傳送請求的時候,一般會帶上Referer,告訴伺服器我是從哪個頁面連結過來的,伺服器藉此可以獲得一些信息用於處理。比如從我主頁上連結到一個朋友那裡,他的伺服器就能夠從HTTP Referer中統計出每天有多少用戶點擊我主頁上的連結訪問他的網站。
Referer的正確英語拼法是referrer。由於早期HTTP規範的拼寫錯誤,為了保持向後兼容就將錯就錯了。其它網路技術的規範企圖修正此問題,使用正確拼法,所以目前拼法不統一。
Request.ServerVariables("HTTP_REFERER")的用法(防外連線)
防外鏈代碼例子(C#)
if (Request.ServerVariables["HTTP_REFERER"] == null || !Request.ServerVariables["HTTP_REFERER"].ToString().Contains(Request.ServerVariables["HTTP_HOST"].ToString())){Server.Transfer("Error.aspx");}
下列情況是從瀏覽器的地址欄正常取得Request.ServerVariables("HTTP_REFERER"):
- 直接用<a href="">
- 用Submit或<input type="image">提交的表單(POST或GET)
- 使用JavaScript提交的表單(POST或GET)
下面我們再看看Request.ServerVariables("HTTP_REFERER")不能正常取值的情況:
- 從收藏夾連結
- 單擊主頁或自定義的地址
- 在瀏覽器中直接輸地址
- 使用JavaScript的Location.href或者是Location.replace()
- <%Response.Redirect%>
- <%Response.AddHeader%>或者是<mete http-equiv="refresh">轉向
- 用XML載入地址
顯然,Request.ServerVariables("HTTP_REFERER")在多數情況下是不能正常工作的,下面我們看一個例子:
ref.asp
<%response.write "You came from: " & request.servervariables("http_referer")%>
ref.htm
<%Response.AddHeader "Refresh", "10;URL=ref.asp"%><meta http-equiv='refresh' content='10;URL=ref.asp'><form method=GET action=ref.asp name=getform><input type=submit value=' Go there (GET) >> '><input type=image style='cursor:hand'></form><p>
看看上面的代碼會得到什麼的結果.
<form method=POST action=ref.asp name=postform><input type=submit value=' Go there (POST) >> '><input type=image style='cursor:hand'></form><p><a href='ref.asp'>直接連結</a><p><a href='#' onclick='window.location.href="ref.asp";return false;'>Javascript location</a><p><a href='#'onclick='window.location.replace("ref.asp");return false;'>Javascript replace</a><p><a href='#' onclick='document.getform.submit();return false;'>javascript GET</a><p><a href='#' onclick='document.postform.submit();return false;'>javascript POST</a>