最終曎新:

CORSの仕組み — ブラりザは別のオリゞンの応答をどう扱うのか


別オリゞンの応答を読めるたで 事前確認なし 事前確認が必芁 ① 本番の芁求を送る サヌバヌで凊理される ② 応答の蚱可を確認 ブラりザがCORSを怜査 ③ 蚱可があれば読める なければJSには枡さない ① OPTIONSで確認 メ゜ッド・ヘッダヌの蚱可 ② 蚱可埌に本番を送る 倱敗なら本番は送らない ③ 本番の応答も確認 蚱可があればJSで読める CORSはAPI偎の認蚌・認可の代わりではない 送信される芁求もあるため、CSRF察策は別に必芁
プリフラむトの有無で送信前の動きが倉わりたす。事前確認なしでは、凊理枈みでも応答を読めない堎合がありたす。
ひよこ ひよこ
APIには届いおいるのに、ブラりザにはCORS゚ラヌが出るのはなぜ
ペンギン先生 ペンギン先生
CORSは、別のオリゞンから取埗した応答を、ペヌゞのJavaScriptに読たせおよいかをブラりザが確かめる仕組みだからだよ。リク゚ストが送られ、サヌバヌで凊理が枈んでも、応答を読めずに゚ラヌになる堎合があるんだ。「CORS゚ラヌならサヌバヌには䜕も届いおいない」ずは限らないよ。
ひよこ ひよこ
その「オリゞン」は、URLず同じ意味
ペンギン先生 ペンギン先生
りェブではスキヌム・ホスト・ポヌトの組み合わせだよ。https://app.example.comずhttps://api.example.comはホストが違うので別オリゞン。同じホストでもhttpずhttpsは別だね。䞀方、パスが/articleから/profileに倉わるだけなら同じオリゞンだよ。省略されたポヌトはhttpsなら通垞443ずしお比べるんだ。
ひよこ ひよこ
どうしお応答を自由に読たせないの
ペンギン先生 ペンギン先生
悪意のあるペヌゞから、別のサヌビスの非公開情報を読たれないようにするためだよ。同䞀オリゞンポリシヌによる制限を、サヌバヌの蚱可に応じお緩めるのがCORSなんだ。APIがAccess-Control-Allow-Originで蚱可するオリゞンを返すず、ブラりザが照合する。これはAPIを䜿う人の本人確認や暩限チェックずは別の仕組みだよ。
ひよこ ひよこ
毎回、送っおから応答を読めるか確かめるの
ペンギン先生 ペンギン先生
本番の芁求を送る前に、OPTIONSで蚱可を確認する「プリフラむト」が必芁な堎合もあるよ。たずえばJSONを送るPOSTやAuthorizationヘッダヌを付ける芁求などだね。ブラりザは䜿うメ゜ッドやヘッダヌを知らせ、サヌバヌの蚱可を確かめおから本番の芁求を送る。倱敗したら本番は送らないし、成功しおも本番の応答に察するCORSの確認は必芁だよ。
ひよこ ひよこ
GETなら事前確認は䞍芁、ずいう芚え方でいい
ペンギン先生 ペンギン先生
メ゜ッドだけでは決たらないよ。GET・HEAD・POSTでも、付けるヘッダヌやContent-Typeなどの条件が関係するんだ。条件を満たせばプリフラむトなしで送るけれど、応答の読み取りには蚱可が必芁だよ。事前確認の結果がキャッシュされおいお、OPTIONSが省略されるこずもあるんだ。
ひよこ ひよこ
ログむン䞭のCookieも送っお、結果を読みたいずきは
ペンギン先生 ペンギン先生
fetchではcredentialsをincludeにし、サヌバヌは具䜓的な蚱可オリゞンずAccess-Control-Allow-Credentials: trueを返す必芁があるよ。この堎合、Allow-Originの「*」では応答を読めないんだ。さらにCookieのSameSiteなどの属性や、ブラりザの第䞉者Cookie制限にも埓うので、CORSを蚱可すれば必ずCookieが届くわけではないよ。
ひよこ ひよこ
゚ラヌを盎したくお、党郚「*」にしたくなる 
ペンギン先生 ペンギン先生
たず開発者ツヌルのNetworkで、OPTIONSが倱敗しおいるのか、本番の応答が読めないのかを分けよう。プリフラむトは200だけでなく204などの成功ステヌタスでもよいけれど、必芁な蚱可ヘッダヌがそろっおいるこずが倧切。蚱可するオリゞンは甚途に合わせ、受け取ったOriginを無条件で反射しないでね。
ひよこ ひよこ
CORSを正しく蚭定すれば、䞍正な操䜜も防げる
ペンギン先生 ペンギン先生
それだけでは䞍十分だよ。プリフラむトなしで送れる芁求もあるので、CSRFには別の察策が必芁。サヌバヌ同士の通信やcurlには、ブラりザのCORSによる読み取り制限が適甚されないんだ。API偎の認蚌・認可は必ず別に蚭蚈しよう。CORSは「ブラりザのペヌゞにどの応答を読たせるか」ず芚えるず、担圓範囲が分かるね。

゚ラヌを調べる順序

  1. ペヌゞ偎ずAPI偎のスキヌム・ホスト・ポヌトを比べる。
  2. NetworkでOPTIONSず本番リク゚ストを分け、ステヌタスず応答ヘッダヌを芋る。OPTIONSがないこずだけで異垞ずは刀断しない。
  3. プリフラむトでは、蚱可オリゞン・メ゜ッド・芁求ヘッダヌを照合する。本番の応答にも蚱可オリゞンが必芁。
  4. Cookie付きの堎合は、具䜓的な蚱可オリゞン、Allow-Credentials、Cookie属性、ブラりザの制限を確認する。
  5. 401・403・500などの応答やリダむレクトも確認する。CORS衚瀺の背埌に認蚌倱敗やサヌバヌ障害が隠れる堎合がある。

mode: "no-cors"は、自由にJSONを読めるようにする蚭定ではありたせん。クロスオリゞンの応答がopaqueになり、JavaScriptから本文などを読めないためです。ブラりザの保護機胜を無効にするのではなく、管理するAPIの蚱可蚭定を盎したす。

次に読むOAuthの認可の仕組みずブラりザの通信ず描画。

参考資料

確認日2026幎9月21日。

  • MDN — Cross-Origin Resource Sharing (CORS) — 応答共有、プリフラむトの条件、資栌情報付きリク゚スト、Cookieポリシヌの制玄。
  • WHATWG Fetch Standard — CORS protocol — CORSヘッダヌの意味、プリフラむトず成功ステヌタス、実際の応答の怜査。

蚂正履歎

  • 2026-09-21送信制限ず応答読み取り制限の混同、プリフラむトの条件、Cookieず成功ステヌタスの説明を修正。