web-dev-qa-db-ja.com

Access-Control-Allow-Methodsのデフォルト値

Access-Control-Allow-Methodsヘッダー、例.

Access-Control-Allow-Methods: OPTIONS, HEAD, GET

このヘッダーを使用したことはありません(Access-Control-Allow-Origin)、しかし、私は過去に動作するようにCORSを得ました。

デフォルトはすべてのメソッドを許可するのですか、それとも未定義の動作で幸運になりましたか?

23
Paul Draper

明確にするために、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/

24
monsur

デフォルトのAccess-Control-Allow-Methodsは、プリフライトリクエストであっても、すべての単純なメソッドを許可します。 https://www.w3.org/TR/cors/#preflight-request のフローが示すように(成功したプリフライトリクエストのステップ7):

要求メソッドがmethodsのメソッドの大文字と小文字を区別する一致ではなく、単純なメソッドではない場合、キャッシュおよびネットワークエラーのステップを適用します。

そして、単純なメソッドの定義は次のとおりです。

メソッドは、次のいずれかの大文字と小文字を区別する一致である場合、単純なメソッドと呼ばれます。GETHEAD POST

したがって、プリフライトされたPOSTリクエスト(カスタムHTTPヘッダーによるものなど)があり、Access-Control-Allow-Methodsレスポンスヘッダー、リクエストは引き続き有効です。

7
M Somerville