web-dev-qa-db-fra.com

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

Il semble que je ne puisse pas modifier la plupart des en-têtes de requête à partir de JavaScript lorsque je passe un appel AJAX à l'aide de XMLHttpRequest. Notez que lorsque request.setRequestHeader Doit être appelé après request.open() dans les navigateurs Gecko (voir http://ajaxpatterns.org/Talk:XMLHttpRequest_Call ). Lorsque je configure le référent , il ne se met pas (j'ai regardé les en-têtes de requête envoyés en utilisant Firebug et Tamper Data). Quand j'ai défini User-Agent , le AJAX appelez complètement. Paramètre Accepter et Content-Type fonctionne-t-il? Sommes-nous empêchés de définir Referer et User-Agent dans 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");
    }
  }
}
60
user121196

Spéc. W3C sur setrequestheader .

Les points brefs:

Si l'en-tête de demande a déjà été défini, la nouvelle valeur DOIT alors être concaténée à la valeur existante en utilisant un COMMA U + 002C suivi d'un ESPACE U + 0020 pour la séparation.

Les agents utilisateurs peuvent attribuer une valeur initiale à l'en-tête User-Agent, mais DOIVENT permettre aux auteurs de lui ajouter des valeurs.

Cependant, après une recherche dans l'infrastructure XHR dans jQuery, ils ne vous permettent pas de modifier les en-têtes User-Agent ou Referer. La chose la plus proche:

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

Je suis plutôt convaincu que ce que vous voulez faire est refusé par une stratégie de sécurité dans FF - si vous souhaitez transmettre un en-tête personnalisé Referer, vous pouvez toujours le faire:

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

La réponse de @gnarf est juste. voulait ajouter plus d'informations.

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

Terminez ces étapes si l'en-tête est une correspondance ne respectant pas la casse pour l'un des 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

4
dekdev

Pour les personnes recherchant ceci maintenant:

Il semble que maintenant la User-Agent en-tête est autorisé depuis Firefox 43. Voir https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name pour la liste actuelle des en-têtes interdits.

1
Redmer K.