2012-01-27 113 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