2

私はいくつかのcsrfのものをテストしていますが、クロスドメインajaxリクエストをPOSTすることが可能かどうか疑問に思っていますContent-Type: application/json

jQueryでこれを実行しようとするたびに:

  $.ajax({
    type: "post",
    url: "http://someotherdomain.com/endpoint",
    contentType: "application/json; charset=UTF-8",
    data: {"a": "1"},
    dataType: "json",
    crossDomain: true,
    success: function(data){ alert(data); }, 
    failure: function(data){ alert(data); }
  });

私は常にHTTPPOSTの代わりにHTTPOPTIONSリクエストを送信します。

注-データを受信する必要はありません。必要なのは一方向の投稿だけです。

注-content-typeを作成することはx-www-form-urlencodedできず、GETリクエストにすることもできません。

4

2 に答える 2

4

ヘッダーはContent-Type: application/json単純なヘッダーではないため、実際のリクエストの前にまずプリフライト リクエストが必要です。表示されている HTTP OPTIONS リクエストはプリフライト リクエストです。CORS 仕様 (http://www.w3.org/TR/cors/) から:

ヘッダー フィールド名が、Accept、Accept-Language、または Content-Language の ASCII 大文字と小文字を区別しない一致である場合、または Content-Type とヘッダーの ASCII 大文字と小文字を区別しない一致である場合、ヘッダーは単純なヘッダーであると言われます。フィールド値のメディア タイプ (パラメーターを除く) は、application/x-www-form-urlencoded、multipart/form-data、または text/plain の ASCII 大文字と小文字を区別しない一致です。

プリフライト リクエストを通過するには、サーバーは次のヘッダーで OPTIONS リクエストに応答する必要があります。

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET,PUT,POST,DELETE
Access-Control-Allow-Headers: Content-Type

ブラウザーがこの応答を受け取ると、実際の HTTP POST 要求が行われます。リクエストに追加のカスタム ヘッダーが含まれている場合は、それらを Access-Control-Allow-Headers レスポンス ヘッダーに含める必要があることに注意してください。CORS プリフライト リクエストの詳細については、こちらをご覧ください。

http://www.html5rocks.com/en/tutorials/cors/#toc-adding-cors-support-to-the-server

于 2012-08-26T18:54:51.340 に答える
2

お使いのブラウザーがいわゆる Cross-Origin Resource Sharing ( CORS ) をサポートしている場合は可能であり、最近のすべてのブラウザーはこれをサポートしています。つまり、サーバーはAccess-Control-Allow-Originヘッダーを提供する必要があります。

また、あなたがおっしゃる通り、回答として情報を取得することを気にしないという点については、フォームを送信するだけでよいでしょうか。

于 2012-08-26T18:31:22.110 に答える