0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CORSを完全に理解したい

Posted at

clientが Origin を送らないと server が Access-Control-Allow-Origin を返してくれないパターンでハマった

CORS に関わるヘッダー(クライアント側とサーバー側)

ヘッダー クライアント側 サーバー側 説明
Origin 必須 必須 リクエストの送信元 (スキーム、ドメイン、ポート) を示す。
Access-Control-Request-Method preflighted request の場合 - 許可を求める HTTP メソッド (例: GET, POST, PUT, DELETE)。
Access-Control-Request-Headers preflighted request の場合 - 許可を求めるカスタムヘッダー。
Access-Control-Allow-Origin - 必須 アクセスを許可する送信元 (Origin) を示す。* で全ての送信元を許可することも可能。
Access-Control-Allow-Methods - preflighted request の場合 許可する HTTP メソッド (例: GET, POST, PUT, DELETE)。
Access-Control-Allow-Headers - preflighted request の場合 許可するカスタムヘッダー。
Access-Control-Allow-Credentials - - true の場合、Cookie や Authorization ヘッダーを送信可能にする。
Access-Control-Expose-Headers - - クライアントがアクセスできるレスポンスヘッダーを指定する。
Access-Control-Max-Age - preflighted request の場合 preflighted request の結果をキャッシュする時間 (秒)。

補足

  • preflighted request: POST メソッドで Content-Type が application/x-www-form-urlencodedmultipart/form-datatext/plain 以外の場合や、カスタムヘッダーを含むリクエストは、事前にサーバーに許可を求める preflighted request となる。
  • 単純リクエスト: GET、HEAD、POST メソッドで Content-Type が application/x-www-form-urlencodedmultipart/form-datatext/plain のいずれかで、カスタムヘッダーを含まないリクエストは、単純リクエストとなり、preflighted request は発生しない。

注意点

  • CORS の設定はサーバー側で行う必要があります。
  • クライアント側は、CORS に対応したブラウザを使用していれば、特別な設定は不要です。
  • セキュリティ上の理由から、Access-Control-Allow-Origin: * は本番環境では避けるべきです。

上記以外にも、CORS に関連するヘッダーは存在しますが、主要なものは上記で網羅されています。

より詳しい情報が必要な場合は、MDN のドキュメントなどを参照してください。

ご不明な点があれば、お気軽にご質問ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?