簡言之,HTTP Referer是header的一部分,當瀏覽器向web服務器發送請求的時候,一般會帶上Referer,告訴服務器我是從哪個頁面鏈接過來的,服務器籍此可以獲得一些信息用于處理。
比如從我主頁上鏈接到一個朋友那里,他的服務器就能夠從HTTP Referer中統計出每天有多少用戶點擊我主頁上的鏈接訪問他的網站。 Referer其實應該是英文單詞Referrer,不過拼錯的人太多了,所以編寫標準的人也就將錯就錯了。 Request.ServerVariables("HTTP_REFERER")的用法(防外連接)。
下列情況是從瀏覽器的地址欄正常取得Request.ServerVariables("HTTP_REFERER")的: ?
1.直接用<a href> ?
2.用Submit或<input type=image>提交的表單(POST or GET) ?
3.使用Jscript提交的表單(POST or GET) ?
下面我們再看看Request.ServerVariables("HTTP_REFERER")不能正常取值的情況: ?
1.從收藏夾鏈接 ?
2.單擊'主頁'或者自定義的地址 ?
3.利用Jscript的location.href or location.replace() ?
4.在瀏覽器直接輸入地址 ?
5.<%Response.Redirect%> ?
6.<%Response.AddHeader%>或<meta http-equiv=refresh>轉向 ?
7.用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>
?
看看上面的代碼會得到什么的結果. ?
<form method=POST action=ref.asp name=postform> ?
<input type=submit value=' Go there (POST) >> '> ?
<input type=image style='cursor:hand'> ?
</form>
<a href='ref.asp'>直接鏈接</a>
<a href='#' οnclick='window.location.href="ref.asp";return false;'>Javascript location</a>
<a href='#'οnclick='window.location.replace("ref.asp");return false;'>Javascript replace</a>
<a href='#' οnclick='document.getform.submit();return false;'>javascript GET</a>
<a href='#' οnclick='document.postform.submit();return false;'>javascript POST</a> ?
Request.ServerVariables(HTTP_REFERER)的工作方式 ?
在JSP中獲取REFERER的方式是:request.getHeader("REFERER"); ?
在PHP中獲取REFERER的方式是:$_SERVER['HTTP_REFERER'];
在ASP中獲取REFERER的方式是:request.ServerVariables("HTTP_REFERER")