it-swarm.com.de

Domainübergreifend AJAX sendet keinen X-Requested-With-Header

Erstellen Sie einen Webdienst auf http: //www.a.com/service.asmx und senden Sie eine domänenübergreifende Ajax-Anfrage von http: //www.b. com. Überprüfen Sie die Header in Firebug oder in Live HTTP Headers oder in jedem anderen Plugin, das Sie wünschen.

Es gibt keine Spur des Feldes X-Requested-With HTTP-Header unter den Anforderungsheadern.

Wenn Sie jedoch eine Ajax-Anfrage von derselben Domain an denselben Service senden (z. B. http: //www.a.com/about), wird dieses Header-Feld angezeigt.

Warum wird das Header-Feld X-Requested-With für domänenübergreifende Ajax-Anforderungen weggelassen?

Update: Ich weiß, dass JSONP-Aufrufe keine AJAX Aufrufe in der Natur sind. Sie werden also keine X-Requested-With Header-Feld in JSONP-Aufrufen.

47
Saeed Neamati

Wenn Sie jQuery für Ihre Ajax-Anforderung verwenden, wird der Header X-Requested-With (HTTP_X_REQUESTED_WITH) = XMLHttpRequest nicht gesendet, da er domänenübergreifend ist. Es gibt jedoch zwei Möglichkeiten, dies zu beheben und den Header zu senden:

Option 1) Setzen Sie den Header im Ajax-Aufruf manuell:

$.ajax({
     url: "http://your-url...",
 headers: {'X-Requested-With': 'XMLHttpRequest'}
});  

Option 2) Weisen Sie jQuery an, keine domänenübergreifenden Standardeinstellungen zu verwenden, damit der X-Requested-With-Header in der Ajax-Anforderung erhalten bleibt:

$.ajax({
  url: "http://your-url...",
 crossDomain: false
});

Dazu muss der Server diese Header zulassen, und dann muss der Server diese Header drucken:

print "Access-Control-Allow-Origin: *\n";
print "Access-Control-Allow-Headers: X-Requested-With, Content-Type\n";

Die erste Zeile oben vermeidet den Fehler "Origin wird von Access-Control-Allow-Origin nicht zugelassen."
Die zweite Zeile vermeidet den Fehler "Request-Header-Feld X-Requested-With ist von Access-Control-Allow-Headers nicht erlaubt."