OPTIONSメソッドとCORSプリフライトリクエスト
CORSプリフライトリクエストにおけるOPTIONSメソッドの仕組み、許可されたメソッドの検出、サーバー機能の確認方法を学びます。
Safe Methods
詳細な説明
OPTIONSとCORS
OPTIONSメソッドはターゲットリソースで利用可能な通信オプションを記述します。モダンなWeb開発における最も重要な役割はCORSプリフライトリクエストです。
プリフライトが発生する条件
ブラウザは以下の場合、実際のリクエストの前に自動的にOPTIONSリクエストを送信します:
- HTTPメソッドがGET、HEAD、POSTのいずれでもない場合
- リクエストにカスタムヘッダーが含まれる場合(例:
Authorization、X-Custom-Header) Content-Typeがapplication/x-www-form-urlencoded、multipart/form-data、text/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ヘッダーがないと、ブラウザは実際のリクエストをブロックします。