63 votes

Définir un en-tête de requête en JavaScript

Il semble que je suis incapable de changer la plupart des en-têtes de requête à partir de JavaScript lors d'un appel AJAX à l'aide de XMLHttpRequest. Notez que lors de l' request.setRequestHeader doit être appelée après l' request.open() dans les navigateurs Gecko (voir http://ajaxpatterns.org/Talk:XMLHttpRequest_Call). Lorsque j'ai mis le Referer, il ne va pas ensemble (j'ai regardé les en-têtes de requête envoyée à l'aide de Firebug et d'Altérer des Données). Lorsque j'ai mis de l'Agent Utilisateur, il a sali l'appel AJAX complètement. Réglage de l' Accepter et de Type de Contenu qui fonctionne, cependant. Sommes-nous autorisés à fixer Referer et de l'User-Agent de Firefox 3?

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");
    }
  }
}

74voto

gnarf Points 49213

W3C Spec sur setrequestheader.

La brève points:

Si la demande d'en-tête en-tête de avait déjà été fixé, alors la nouvelle valeur DOIVENT être concaténées à l'existant valeur à l'aide d'un U+C 002 VIRGULE suivie par un U+0020 ESPACE de séparation.

Samu PEUT donner l'-tête User-Agent une valeur initiale, mais DOIT permettre aux auteurs d'ajouter des valeurs.

Cependant, Après une recherche dans le cadre XHR en jQuery ils ne vous permet pas de changer le User-Agent ou Referer en-têtes. La chose la plus proche:

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

Je penche vers l'opinion que ce que vous voulez faire est d'être refusé par une politique de sécurité FF - si vous souhaitez passer quelques personnalisée Referer type d'en-tête, vous pouvez toujours le faire:

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

4voto

dekdev Points 1323

@gnarf réponse est juste . voulais ajouter plus d'informations .

Mozilla Bug de Référence : https://bugzilla.mozilla.org/show_bug.cgi?id=627942

Mettre fin à ces étapes si l'en-tête est un casse match pour l'un de les en-têtes suivants:

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X