Créez un service Web sur http://www.a.com/service.asmx et envoyez-lui une demande ajax interdomaine à partir de http://www.b.com. Vérifiez les en-têtes dans Firebug, ou dans Live HTTP Headers, ou tout autre plugin que vous souhaitez.
Il n'y a aucune trace du champ X-Requested-With HTTP Header parmi les en-têtes de demande.
Cependant, si vous envoyez une demande ajax au même service à partir du même domaine (disons par exemple http://www.a.com/about), vous verrez ce champ d'en-tête.
Pourquoi le champ d'en-tête X-Requested-With est-il omis pour les demandes ajax interdomaines?
Mise à jour: Je sais que les appels JSONP ne sont pas AJAX appels dans la nature. Ainsi, vous ne verrez aucun X-Requested-With header dans les appels JSONP.
Si vous utilisez jQuery pour effectuer votre demande ajax, il n'enverra pas l'en-tête X-Requested-With (HTTP_X_REQUESTED_WITH) = XMLHttpRequest, car il s'agit d'un domaine croisé. Mais il y a 2 façons de résoudre ce problème et d'envoyer l'en-tête:
Option 1) Définissez manuellement l'en-tête dans l'appel ajax:
$.ajax({
url: "http://your-url...",
headers: {'X-Requested-With': 'XMLHttpRequest'}
});
Option 2) Dites à jQuery de ne pas utiliser les valeurs par défaut interdomaines, afin qu'il conserve l'en-tête X-Requested-With dans la demande ajax:
$.ajax({
url: "http://your-url...",
crossDomain: false
});
Mais avec cela, le serveur doit autoriser ces en-têtes, puis le serveur doit imprimer ces en-têtes:
print "Access-Control-Allow-Origin: *\n";
print "Access-Control-Allow-Headers: X-Requested-With, Content-Type\n";
La première ligne ci-dessus évitera l'erreur "L'origine n'est pas autorisée par Access-Control-Allow-Origin."
La deuxième ligne évitera l'erreur "Le champ d'en-tête de demande X-Requested-With n'est pas autorisé par Access-Control-Allow-Headers."