Access-Control-Allow-Methods
ヘッダー、例.
Access-Control-Allow-Methods: OPTIONS, HEAD, GET
このヘッダーを使用したことはありません(Access-Control-Allow-Origin
)、しかし、私は過去に動作するようにCORSを得ました。
デフォルトはすべてのメソッドを許可するのですか、それとも未定義の動作で幸運になりましたか?
明確にするために、Access-Control-Request-Method
は、CORSプリフライトリクエストでブラウザによって設定されるリクエストヘッダーであり、1つの値のみを持つことができます。 Access-Control-Allow-Methods
ヘッダーはCORS応答ヘッダーであり、複数の値を持つことができます。これはサーバーが指定する値であるため、Access-Control-Allow-Methods
について尋ねていると思います。
Access-Control-Allow-Methods
ヘッダーは、クロスオリジンリクエストの特定のエンドポイントで許可されるHTTPメソッドを示します。すべてのHTTPメソッドを許可する場合、値をAccess-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD
のような値に設定しても構いません。ただし、エンドポイントをいくつかのメソッドのみに制限する場合は、それらのメソッドのみを含める必要があります。
これをこれまで見たことがない理由として、このヘッダーはCORSプリフライトリクエストでのみ使用されます。アプリケーションがCORSプリフライトを使用していなかったため、プリフライトをトリガーするために何かが変更された可能性があります。アプリケーションは、GET/POST以外のHTTPメソッド、またはカスタムHTTPヘッダーを使用しますか?
CORSプリフライトリクエストの詳細については、こちらをご覧ください: http://www.html5rocks.com/en/tutorials/cors/
デフォルトのAccess-Control-Allow-Methods
は、プリフライトリクエストであっても、すべての単純なメソッドを許可します。 https://www.w3.org/TR/cors/#preflight-request のフローが示すように(成功したプリフライトリクエストのステップ7):
要求メソッドがmethodsのメソッドの大文字と小文字を区別する一致ではなく、単純なメソッドではない場合、キャッシュおよびネットワークエラーのステップを適用します。
そして、単純なメソッドの定義は次のとおりです。
メソッドは、次のいずれかの大文字と小文字を区別する一致である場合、単純なメソッドと呼ばれます。GETHEAD POST
したがって、プリフライトされたPOSTリクエスト(カスタムHTTPヘッダーによるものなど)があり、Access-Control-Allow-Methods
レスポンスヘッダー、リクエストは引き続き有効です。