8

Когда я выполняю CORS в IE через объект XDomainRequest, HTTP-заголовок Referer не отправляется. Есть ли официальная документация, охватывающая это? Я полностью понимаю, что полагаться на HTTP-заголовок Referer является основополагающей идеей, однако без убедительных доказательств я застрял здесь и не смог доказать, что наш архитектор ошибается.Почему IE XDomainRequest не отправляет заголовок Referer

Пример дамп:

И.Е. Запрос

GET http://example.com/some/url HTTP/1.1 
Accept: */* 
Origin: http://another.domain.com 
Accept-Language: sk-SK 
UA-CPU: AMD64 
Accept-Encoding: gzip, deflate 
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3) 
Host: example.com 
Connection: Keep-Alive 
Pragma: no-cache 

хром Запрос

GET http://example.com/some/url HTTP/1.1 
Host: example.com 
Connection: keep-alive 
Origin: http://another.domain.com 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.69 Safari/537.36 
Accept: */* 
Referer: http://another.domain.com/ 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: sk-SK,sk;q=0.8,cs;q=0.6,en-US;q=0.4,en;q=0.2 
+1

IE8 может быть рассматривая заголовок «Referrer» как информацию, идентифицирующую пользователя: http://msdn.microsoft.com/en-us/library/ie/cc288060(v=vs.85).aspx –

+0

Это имело бы смысл, однако я не был возможно, это документировано где угодно –

ответ

2

Eric Law (бывший менеджер программ IE) ответил на это в своем сообщении в блоге, как и ожидалось, предел ation, возвращающийся из IE8 раз:

Мы хотели убедиться, что объект XDomainRequest не позволит злоумышленнику выдавать запрос, который не может выдавать HTML-форма. Это важно, потому что заголовок Access-Control-Allow-Origin недоступен до тех пор, пока ответ не будет возвращен, поэтому до того, как будет отправлен запрос, нет способа сообщить, хочет ли сервер принимать междоменные HTTP-запросы. Без этих ограничений, «огонь и забыть» CSRF нападение может происходить на старом сервере, даже если сервер не возвращает Access-Control-Allow-Origin заголовок

http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx

1

запросы Междоменных ("XDRs") является анонимным для защиты пользовательских данных. Это означает, что серверы не могут легко определить, кто запрашивает данные. Чтобы защитить конфиденциальность пользователей, ответьте на кросс-доменные данные, которые не чувствительны и не идентифицируются лично. Чтобы предотвратить утечку данных интрасети на вредоносные интернет-сайты, мы препятствуем сайтам интрасети предоставлять данные XDR. Таким образом, IE несколько раз предотвращает объект XDomainRequest из-за безопасности.

+0

Вы можете найти это документально в любом месте. Я понимаю, почему это может произойти, однако, похоже, что никакая официальная документация MSDN не охватывает этот –

+0

http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds .aspx – nickvane

0

По собственной странице Microsoft, вы можете использовать этот новый объект, чтобы избежать этой проблемы:

//1. Create XDR object 
XDomainRequest xdr = new(); 

// 2. Open the connection to the server using the POST method 
xdr.open ("POST", "http://www.example.com/xdr.txt"); 

// 3. We send information to the server 
xdr.send ("data to be processed"); 

Согласно W3C, вы можете использовать этот

var xhr = new XMLHttpRequest(); 
xhr.open("GET", "http://www.example.com/.../datos.php", true); 
xhr.onreadystatechange = function(){ 
    if (xhr.readyState == 4) { 
    if (xhr.status == 200) { 
     document.body.innerHTML = "Reply: " + xhr.responseText; 
    } else { 
     document.body.innerHTML = "ERROR"; 
    } 
    } 
}; 
xhr.send(null); 

Существует также библиотека для IE8 и IE9, чтобы избежать этой проблемы, но вы должны использовать jquery Ajax https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest

+1

Я уже делаю это через объект XDomainRequest, и, я считаю, из-за этого не посылается заголовок Referer. Я не могу использовать XMLHttpRequest, как предлагает W3C, так как мне нужно пересечь запрос домена, который не разрешен для XMLHttpRequest в IE (http://msdn.microsoft.com/en-us/library/dd573303(v=vs +0,85) .aspx) –

Смежные вопросы