2012-01-27 115 views
1

Request.ServerVariables(「HTTP_REFERER」)在Internet Explorer中不起作用。Request.ServerVariables(「HTTP_REFERER」)在IE中不起作用

我們有一個要求,有兩個不同的網站,www.example1.com和www.example2.com。我必須將使用www.example1.com的所有用戶重定向到www.example2.com,並且當我們有意在www.example2.com的下拉列表中選擇www.example1.com時,它必須打開而不進行任何重定向。

爲此,我在www.example1.com中使用了Request.ServerVariables(「HTTP_REFERER」),以便根據我應用的重定向確定誰在請求www.example1.com。這在所有標準瀏覽器(如Mozilla和Google Chrome)中運行良好,但不適用於Internet Explorer。

我用下面的ASP代碼www.example1.com

<%if(Request.ServerVariables("HTTP_REFERER") <> "http://www.example2.org/") then 

URL = "http://api.ipinfodb.com/v3/ip-country/?key=c184c2d089c7763a81d7701a662b57fe3bf90dbfd8bf60d29948878531e24472&ip=" &   Request.ServerVariables("REMOTE_ADDR") 
       Set conn = Server.CreateObject("MSXML2.ServerXMLHTTP")  
      conn.open "GET", URL, False, "", "" 
      conn.send   
       UserCountry = conn.ResponseText 
       conArray = Split(UserCountry, ";") 
      if ((conArray(3) = "US")) Then 
       response.redirect("http://www.example2.org/") 
      end if 
end if    
%> 

它能正常工作在所有瀏覽器除了IE以外。任何人都可以知道嗎?你能否給我建議所有瀏覽器(包括IE瀏覽器)的等效代碼,它會給出類似的結果。

回答

2

你不能依靠HTTP_REFERER存在:用戶代理不需要設置它。

嘗試使用HTTP_HOST來代替:自HTTP 1.1以來,主機頭是強制性的。

If (Request.ServerVariables("HTTP_HOST") <> "www.example2.org") Then 
+0

非常感謝您的建議,請您詳細說明主機標題以及它對我有何幫助。 – 565 2012-01-27 10:56:50

+0

@Praveen:這裏有一個標題列表 - http://en.wikipedia.org/wiki/HTTP_headers。簡而言之,「主機」標題應包含用於訪問該頁面的域名。 – LukeH 2012-01-27 11:04:26

+0

:我使用過HTTP_HOST,但它獲取當前頁面主機名我需要一個需求,比如我需要請求頁面的確切域名。 HTTP_REFERER呈現確切的輸出,但不能在IE中工作。您可以指定任何適用於所有瀏覽器且具有預期實際輸出的方法。 – 565 2012-01-27 12:22:41

0

請檢查下面的鏈接,HTTP_REFERER不是HTTP規範的強制性成員。

您可以使用服務器變量SERVER_NAME來滿足您的需求,它應該可以工作。

快樂編碼!

+1

@ Ravia:謝謝你的建議,SERVER_NAME只返回服務器名稱,我需要像我想要的頁面的確切服務器名稱的要求,你能提出任何方法嗎? – 565 2012-01-27 11:55:00

+0

如果您知道服務器的IP地址,則可以使用REMOTE_ADDR或嘗試REQUEST_URI。 – Ravia 2012-01-27 13:57:44