CORSとは
CORSとは、オリジン間リソース共有(Cross-Origin-Resource-Sharing)のことで、読み方は一般的に「コルス」。
コンテンツを読み取ることを許可しているオリジンを、サーバがクライアントに共有する機能。
オリジンとは、ホスト(ドメイン)やスキーム(プロトコル)、ポート番号のこと。
詳しくは下記から↓
そもそも、ウェブのセキュリティにおいて同一オリジンポリシーが存在し、あるオリジンから別のオリジンにアクセスできないよう制限されている。
詳しくは下記から↓
つまり、CORSとは、アクセス先のオリジンがアクセス元のオリジンに対して、アクセス許可を与える際に使われる。
注意点!
CORSはサーバ(バックエンド)での設定が必要!
CORSエラーが発生して解決策見つけるためにググると、
「HTTPヘッダーに設定すれば動くようになるよ」
という情報が散見される。
これを取り違え、クライアント側のリクエストヘッダーに設定しても期待通りに動くことはない。
前述した通り、CORS設定はサーバ側の問題であり、HTTPヘッダーというのは、レスポンスヘッダーのことであるからだ。
CORSはあくまで各ブラウザが勝手に対応しているだけ!
例えば、PostmanからCORS設定をしていない(=同一オリジンからのみアクセスを許可している)APIを叩いてみる。
この場合、リクエストは問題なく送れてしまう!
というのも、そもそもCORSは各ブラウザが勝手に対応しているものであるからだ。
つまり、ブラウザの仕様によってこの辺の動きが異なってくる(※1)し、CORS設定はAPIの脆弱性対策には大して効果がないことがわかる。
※1:CORSというかオリジンの話だが、IEでは同一オリジンの確認にポート番号を含まない、といった例が挙げられる。
参考
MDNの定義は目を通しておく価値あり
- オリジン間リソース共有 (CORS) - HTTP | MDN
- 同一オリジンポリシー - ウェブセキュリティ | MDN
- Origin (オリジン) - MDN Web Docs 用語集: ウェブ関連用語の定義 | MDN