Request.ServerVariables(HTTP_REFERER) не работает в IE

Request.ServerVariables("HTTP_REFERER") не работает в Internet Explorer.

У нас есть требование, например, есть два разных веб-сайта, скажем, www.example1.com и www.example2.com. Я должен перенаправить всех пользователей, которые используют www.example1.com, на www.example2.com, и когда мы намеренно выбираем www.example1.com в раскрывающемся списке www.example2.com, он должен открываться без перенаправления.

Для этого я использовал Request.ServerVariables("HTTP_REFERER") в www.example1.com, чтобы я мог определить, кто запрашивает 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), который дал бы аналогичные результаты, как указано.


person 565    schedule 27.01.2012    source источник


Ответы (2)


Вы не можете полагаться на присутствие HTTP_REFERER: пользовательские агенты не обязаны его устанавливать.

Попробуйте вместо этого использовать HTTP_HOST: заголовок хоста является обязательным, начиная с HTTP 1.1.

If (Request.ServerVariables("HTTP_HOST") <> "www.example2.org") Then
person LukeH    schedule 27.01.2012
comment
Большое спасибо за предложение, не могли бы вы уточнить, что такое заголовок хоста и чем он будет мне полезен. - person 565; 27.01.2012
comment
@Praveen: здесь есть список заголовков - en.wikipedia.org/wiki/HTTP_headers. Короче говоря, заголовок Host должен содержать доменное имя, которое использовалось для доступа к этой странице. - person LukeH; 27.01.2012
comment
: Я использовал HTTP_HOST, но он получает текущее имя хоста страницы. Мне нужно требование, например, мне нужно точное доменное имя запрошенной страницы. HTTP_REFERER отображает точный вывод, но не работает в IE. Можете ли вы указать какой-либо метод, который работает для всех браузеров с ожидаемым фактическим выводом. - person 565; 27.01.2012
comment
@Praveen: доменное имя является именем хоста. Вы хотите сказать, что вам нужен полный URL, а не только доменное имя? - person LukeH; 27.01.2012
comment
Да, Люк, ты прав!.. Я имею в виду полный URL-адрес запрашиваемой страницы. Не могли бы вы предложить какой-либо метод, который работает для всех браузеров. - person 565; 27.01.2012
comment
Если вы получаете доступ к коду с другой страницы, которая выполняет Response.Redirect, это реальная проблема. Сервер IIS очистит значение HTTP_REFERER перед переходом на новую страницу именно так, как это было задумано. А HTTP_HOST просто возвращает доменное имя с префиксом www. - person PaulScott; 08.01.2021

Пожалуйста, проверьте ссылку ниже, которая говорит, что HTTP_REFERER не является обязательным членом спецификации HTTP.

Вы можете использовать серверную переменную SERVER_NAME для своего требования, и она должна работать.

Удачного кодирования !!

person Ravia    schedule 27.01.2012
comment
@ Ravia: Спасибо за предложение, SERVER_NAME возвращает только имя сервера, мне нужно требование, например, я хочу точное имя сервера запрошенной страницы, можете ли вы предложить какой-либо метод для этого? - person 565; 27.01.2012
comment
Если вы знаете IP-адрес своего сервера, вы можете использовать REMOTE_ADDR или попробовать REQUEST_URI. - person Ravia; 27.01.2012