OPTIONSメソッドとCORSプリフライトリクエスト

CORSプリフライトリクエストにおけるOPTIONSメソッドの仕組み、許可されたメソッドの検出、サーバー機能の確認方法を学びます。

Safe Methods

詳細な説明

OPTIONSとCORS

OPTIONSメソッドはターゲットリソースで利用可能な通信オプションを記述します。モダンなWeb開発における最も重要な役割はCORSプリフライトリクエストです。

プリフライトが発生する条件

ブラウザは以下の場合、実際のリクエストの前に自動的にOPTIONSリクエストを送信します:

  • HTTPメソッドがGET、HEAD、POSTのいずれでもない場合
  • リクエストにカスタムヘッダーが含まれる場合(例:AuthorizationX-Custom-Header
  • Content-Typeapplication/x-www-form-urlencodedmultipart/form-datatext/plainのいずれでもない場合
  • リクエストがクロスオリジン(異なるプロトコル、ドメイン、またはポート)の場合

プリフライトリクエスト例

OPTIONS /api/users HTTP/1.1
Host: api.example.com
Origin: https://app.example.com
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: Content-Type, Authorization

プリフライトレスポンス例

HTTP/1.1 204 No Content
Access-Control-Allow-Origin: https://app.example.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Max-Age: 86400

主要なレスポンスヘッダー

ヘッダー 目的
Access-Control-Allow-Origin どのオリジンがリソースにアクセスできるか
Access-Control-Allow-Methods どのHTTPメソッドが許可されるか
Access-Control-Allow-Headers どのリクエストヘッダーが許可されるか
Access-Control-Max-Age プリフライト結果をキャッシュできる秒数

CORSコンテキスト外での使用

OPTIONSはサーバーがサポートするメソッドを検出するために独立して使用することもできます:

OPTIONS /api/users HTTP/1.1
Host: api.example.com

HTTP/1.1 200 OK
Allow: GET, POST, PUT, DELETE, OPTIONS

Allowヘッダーはそのエンドポイントでサポートされるメソッドを一覧表示します。

ユースケース

app.example.comでホストされているシングルページアプリケーションがapi.example.comを呼び出す必要があります。ブラウザはPUTリクエストの前にOPTIONSプリフライトを自動送信し、サーバーが許可されたオリジンとメソッドで応答します。適切なCORSヘッダーがないと、ブラウザは実際のリクエストをブロックします。

試してみる — HTTP Method Reference

フルツールを開く