Проблема обозревателя http в Internet Explorer - PullRequest
6 голосов
/ 31 декабря 2008

похоже, у меня возникла проблема с Internet Explorer 7. У меня есть HTML-страница, которая имеет ссылки на файлы на другом сервере. Сервер, на который я ссылаюсь, проверяет реферер запроса, и если реферер действителен, он разрешает доступ к ресурсу. Он отлично работает в Firefox 2 и 3 (поскольку сервер, на котором находится моя html-страница, является допустимым реферером), но в Internet Explorer он не работает, другой сервер отказывает мне в ресурсе (генерирует ошибку http 403). Я занимался поиском и наткнулся на этот http://support.microsoft.com/kb/178066, и я пробовал html-страницу в https и http и то же самое для сервера, к которому я подключаюсь, но у меня нет ничего для Internet Explorer. Что я могу сделать, чтобы обойти это?

спасибо

Ответы [ 6 ]

13 голосов
/ 31 декабря 2008

Как вы "добираетесь" до рассматриваемого файла?

ЕСЛИ ВЫ ИСПОЛЬЗУЕТЕ JAVASCRIPT для доступа к файлу, IE НЕ СМОЖЕТ.

В IE была серьезная ошибка с незапамятных времен.

e.g. document.location.href = 'myNewPage.html'; //FAILS to pass referer in IE

Ошибка # 421 на веб-треке ошибок

также не будет исправлено в IE8! : - (

3 голосов
/ 24 августа 2011

Я нашел это решение на http://dracoblue.net/dev/referer-with-documentlocation-is-broken-in-internet-explorer/145/, но я не пробовал себя

function goto(url)
{
    var referLink = document.createElement('a');
    referLink.href = url;
    document.body.appendChild(referLink);
    referLink.click();
}
3 голосов
/ 31 декабря 2008

Вы можете использовать другой механизм в любом случае. Рефереры легко подделываются. Проверка рефералов на самом деле не является хорошим решением для обеспечения безопасности, и если они будут вызывать у вас головную боль, как это, возможно, вы захотите найти другой способ.

Например, сервер, генерирующий первую страницу, может добавить токен авторизации в URL-адреса второго сервера, а второй сервер может проверить, что токены действительны. Таким образом, все детали находятся под вашим контролем, и единственное поведение браузера, на которое вы рассчитываете, заключается в том, что полный URL-адрес отправляется на второй сервер.

2 голосов
/ 01 июня 2009

Я решил, включите этот код на всех страницах вашего проекта

session_start();
if($_SERVER['SERVER_PORT'] == 443 )
    $http = 'https://';
else
    $http = 'http://';

$adress = $http.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];  

$_SESSION['referer'] = $_SESSION['current_page'];
$_SESSION['current_page'] = $adress;
$_SERVER['HTTP_REFERER'] = $_SESSION['referer'];
1 голос
/ 21 июня 2009

Я не использую IE7, поэтому я не могу проверить это .. но я думаю, это должно работать без проблем:

<script type="text/javascript">
      document.location= "www.your-server.com/your_page.html?referrer=" + document.location.href;
</script>

И чем на втором сервере вы можете проверить значение параметра referrer вместо того, чтобы полагаться на то, отправляет браузер реферер или нет.

0 голосов
/ 31 декабря 2008

Отключите брандмауэры, антивирусную и / или антишпионскую проверку и посмотрите, поможет ли это. Я знаю, что это может показаться нелепым, но я лично видел много случаев, когда проблема чудесным образом исчезала, когда был принят этот совет.

Они, как правило, имеют слишком усердное представление о том, что такое «Безопасный», и в процессе работы нарушают поведение браузера. (Если у вас AVG и у вас проблемы с электронной почтой (pop3), выключите AVG и наблюдайте, как электронная почта волшебным образом возвращается в рабочее состояние)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...