Preflight request (プリフライトリクエスト)
CORS のプリフライトリクエストは CORS のリクエストの一つであり、サーバーが CORS プロトコルを理解していて準備がされていることを、特定のメソッドとヘッダーを使用してチェックします。
これは OPTIONS
リクエストであり、 Access-Control-Request-Method
,Access-Control-Request-Headers
, Origin
の 3 つの HTTP リクエストヘッダー使用します。
プリフライトリクエストはブラウザーが自動的に発行するものであり、通常は、フロントエンドの開発者が自分でそのようなリクエストを作成する必要はありません。これはリクエストが "to be preflighted" と修飾されている場合に現れ、単純リクエストの場合は省略されます。
例えば、クライアントはプリフライトリクエストを使用して、 DELETE
リクエストを送信する前に、 DELETE
リクエストを許可するかどうかをサーバーに尋ねるかもしれません。
OPTIONS /resource/foo
Access-Control-Request-Method: DELETE
Access-Control-Request-Headers: Origin, X-Requested-With
Origin: https://foo.bar.org
サーバーが許可している場合は、プリフライトリクエストへのレスポンスで、 Access-Control-Allow-Methods
レスポンスヘッダーに DELETE
を含めます。
HTTP/1.1 204 No Content
Connection: keep-alive
Access-Control-Allow-Origin: https://foo.bar.org
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
Access-Control-Allow-Headers: Origin, X-Requested-With
Access-Control-Max-Age: 86400
プリフライトレスポンスは、例えば上の例のように Access-Control-Max-Age
ヘッダーを使用して、同じ URL で作成されたリクエストに対してオプションでキャッシュすることができます。プリフライトレスポンスをキャッシュするには、ブラウザーが管理する一般的な HTTP キャッシュとは別個の固有のキャッシュを使用します。プリフライトレスポンスがブラウザーの一般的な HTTP キャッシュにキャッシュされることはありません。