2009-08-12 32 views
55

Parece que no puedo cambiar la mayoría de los encabezados de solicitud de JavaScript al realizar una llamada AJAX utilizando XMLHttpRequest. Tenga en cuenta que cuando se debe llamar a request.setRequestHeader después de request.open() en los navegadores Gecko (consulte http://ajaxpatterns.org/Talk:XMLHttpRequest_Call). Cuando configuro Referer, no se establece (miré los encabezados de solicitud enviados usando Firebug y Tamper Data). Cuando configuré User-Agent, dañó por completo la llamada AJAX. La configuración Aceptar y Content-Type funciona, sin embargo. ¿Se nos impide configurar Referer y User-Agent en Firefox 3?Establecer un encabezado de solicitud en JavaScript

var request = new XMLHttpRequest(); 
var path="http://www.yahoo.com"; 
request.onreadystatechange=state_change; 

request.open("GET", path, true); 
request.setRequestHeader("Referer", "http://www.google.com"); 
//request.setRequestHeader("User-Agent", "Mozilla/5.0"); 
request.setRequestHeader("Accept","text/plain"); 
request.setRequestHeader("Content-Type","text/plain"); 

request.send(null); 
    function state_change() 
{ 
if (request.readyState==4) 
    {// 4 = "loaded" 
    if (request.status==200) 
    {// 200 = OK 
    // ...our code here... 
    alert('ok'); 
    } 
    else 
    { 
    alert("Problem retrieving XML data"); 
    } 
    } 
} 
+1

offhand no estoy seguro (no hay herramientas para probar ahora mismo), pero parece probable ya que estos dos encabezados no deberían ser configurados y, de hecho, configurarlos es intrínsecamente sospechoso – annakata

Respuesta

64

W3C Spec on setrequestheader.

Las breves puntos:

Si el encabezado de la solicitud ya había ha establecido, entonces el nuevo valor DEBE ser concatenados al valor existente utilizando una U + 002C coma seguida de U + 0020 Espacio para la separación

Los AU pueden dar al encabezado User-Agent un valor inicial, pero DEBEN permitir que los autores le agreguen valores.

Sin embargo, después de buscar a través del marco XHR en jQuery, no le permiten cambiar los encabezados User-Agent o Referer. Lo más cercano:

// Set header so the called script knows that it's an XMLHttpRequest 
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); 

me estoy inclinando hacia la opinión de que lo que se quiere hacer es ser negado por una política de seguridad en FF - si desea pasar alguna costumbre cabecera Referer tipo siempre se puede hacer:

xhr.setRequestHeader('X-Alt-Referer', 'http://www.google.com'); 
+1

Sí, FF niega específicamente la edición de "ciertos encabezados ": http://mxr.mozilla.org/mozilla1.8.0/source/extensions/xmlextras/base/src/nsXMLHttpRequest.cpp#1637 –

3

@gnarf answer is right. quería agregar más información.

Mozilla Bug Referencia: https://bugzilla.mozilla.org/show_bug.cgi?id=627942

poner fin a estos pasos si la cabecera es una combinación de mayúsculas y minúsculas para uno de los siguientes encabezados:

Accept-Charset 
Accept-Encoding 
Access-Control-Request-Headers 
Access-Control-Request-Method 
Connection 
Content-Length 
Cookie 
Cookie2 
Date 
DNT 
Expect 
Host 
Keep-Alive 
Origin 
Referer 
TE 
Trailer 
Transfer-Encoding 
Upgrade 
User-Agent 
Via 

Fuente: https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-setrequestheader

+0

Sí, es extraño. El antiguo borrador de gnarf hace referencia a que los UA DEBEN permitir que los autores agreguen cosas al encabezado User-Agent. Pero la especificación actual dice que los UA DEBEN ignorar cualquier intento de modificación del encabezado User-Agent. – Robert

Cuestiones relacionadas