web-dev-qa-db-ja.com

クロスドメインAJAXはX-Requested-Withヘッダーを送信しません

http://www.a.com/service.asmxでWebサービスを作成し、そこからクロスドメインajaxリクエストを送信しますhttp://www.b.comFirebug、またはLive HTTP Headers、またはanyのヘッダーを確認しますあなたが望む他のプラグイン。

要求ヘッダーの中にX-Requested-WithHTTPヘッダーフィールドのトレースはありません。

ただし、同じドメインから同じサービスにajaxリクエストを送信する場合(たとえばhttp://www.a.com/about) 、そのヘッダーフィールドが表示されます。

クロスドメインAjaxリクエストのX-Requested-Withヘッダーフィールドが省略されているのはなぜですか?

更新:JSONP呼び出しはAJAX呼び出しではないことを知っています。したがって、X-Requested-Withヘッダーフィールド、JSONP呼び出し。

47
Saeed Neamati

JQueryを使用してajaxリクエストを行う場合、クロスドメインであるため、ヘッダーX-Requested-With(HTTP_X_REQUESTED_WITH)= XMLHttpRequestを送信しません。ただし、これを修正してヘッダーを送信するには2つの方法があります。

オプション1)ajax呼び出しでヘッダーを手動で設定します。

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

オプション2)クロスドメインのデフォルトを使用しないようにjQueryに指示します。これにより、ajaxリクエストにX-Requested-Withヘッダーが保持されます。

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

しかし、これでは、サーバーはそれらのヘッダーを許可する必要があり、サーバーはそれらのヘッダーを印刷する必要があります。

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

上記の最初の行はエラーを回避します"OriginはAccess-Control-Allow-Originでは許可されていません。"
2行目はエラーを回避します「リクエストヘッダーフィールドX-Requested-WithはAccess-Control-Allow-Headersでは許可されていません。」