1. ホーム
  2. jquery

[解決済み] ChromeのAJAXはGET/POST/PUT/DELETEではなくOPTIONSを送信しますか?

2022-10-26 22:44:58

質問

私は職場で内部ウェブアプリケーションに取り組んでいます。IE10 では、リクエストは問題なく動作しますが、Chrome では、すべての AJAX リクエスト (多数あり) が、私がそれを与えるどんな定義されたメソッドの代わりに、OPTIONS を使用して送信されます。技術的には、私のリクエストはクロスドメインです。 この閉鎖された jquery のバグ は問題を定義していますが、本当の修正ではありません。

ajaxリクエストで適切なhttpメソッドを使用するには、どうすればよいですか?

編集してください。

これは、すべてのページのドキュメントロードにあります。

jQuery.support.cors = true;

そして、すべてのAJAXは同じように作られています。

var url = 'http://localhost:57124/My/Rest/Call';
$.ajax({
    url: url,
    dataType: "json",
    data: json,
    async: true,
    cache: false,
    timeout: 30000,
    headers: { "x-li-format": "json", "X-UserName": userName },
    success: function (data) {
        // my success stuff
    },
    error: function (request, status, error) {
        // my error stuff
    },
    type: "POST"
});

どのように解決するのですか?

Chrome はリクエストのプリフライトで CORS ヘッダを探します。リクエストに問題がない場合は、実際のリクエストが送信されます。もしこれをクロスドメインで行っている場合は、単にこれに対処するか、クロスドメインでないリクエストを行う方法を見つける必要があります。これが、jQueryのバグがwon't-fixとしてクローズされた理由です。これは設計によるものです。

単純なリクエスト(上述)とは異なり、"preflighted" リクエストは最初に OPTIONS メソッドで HTTP リクエストを送信します。 実際のリクエストが安全かどうかを判断するために、他のドメインのリソースに を送信します。 クロスサイトリクエストは、ユーザーデータに影響を与える可能性があるため、このようにプリフライトされます。 は、ユーザーデータに影響を与える可能性があるため、このようにプリフライトされます。 特に、リクエストは プリフライトされるのは

  • GET、HEAD、POST 以外のメソッドを使用している。 また、POST を使用してリクエストデータを送信する際に、Content-Type が application/x-www-form-urlencoded, multipart/form-data, または text/plain 以外の Content-Type を持つリクエストデータを送信するために POST が使用されている場合。 例えば、POST リクエストが XML ペイロードをサーバーに送信する場合、application/xml または text/xml を使用します。 を使用してサーバーに送信する場合、そのリクエストはプリフライトされます。
  • リクエストにカスタムヘッダを設定します (例: リクエストが X-PINGOTHER のようなヘッダを使用する場合)。