🌐 CORSとは?
📖 定義
CORS(Cross-Origin Resource Sharing、オリジン間リソース共有)は、異なるオリジン(origin)のリソースにアクセスする権限をブラウザに許可するように伝えるセキュリティメカニズムです。Webブラウザは、セキュリティ上の理由から基本的に異なるオリジンのリソース要求を制限しますが、CORSはこれを安全に許可する方法です。
🎯 比喩で理解する
マンションのセキュリティシステム
想像してください。あなたはA棟のマンションに住んでいます:
- 同一オリジン(Same-Origin): A棟101号からA棟管理室に電話 → 自由に通話可能 ✅
- 異なるオリジン(Cross-Origin): A棟101号からB棟管理室に電話 → セキュリティ確認が必要 🔒
- CORS設定: B棟が「A棟の住民も電話を受けます」と事前に許可 → 通話可能 ✅
CORSはこのように異なる建物(オリジン)のリソースにアクセスする際に必要な許可証です!
⚙️ 動作原理
1. オリジン(Origin)とは?
オリジンはプロトコル、ドメイン、ポートの組み合わせです:
https://www.example.com:443/page
│ │ │ │ │
│ │ │ │ └─ パス (オリジンとは無関係)
│ │ │ └────── ポート (省略時443)
│ │ └────────────────── ドメイン
│ └────────────────────── プロトコル
└───────────────────────────── オリジン (Origin)
2. 同一オリジン vs 異なるオリジン
// 現在のページ: https://www.example.com
✅ 同一オリジン (Same-Origin)
- https://www.example.com/page
- https://www.example.com/api/users
❌ 異なるオリジン (Cross-Origin)
- http://www.example.com // プロトコルが異なる
- https://api.example.com // ドメインが異なる
- https://www.example.com:8080 // ポートが異なる
3. CORSリクエストプロセス
Simple Request (単純リクエスト)
1. ブラウザ → サーバー: リクエスト送信
GET https://api.example.com/data
Origin: https://www.mysite.com
2. サーバー → ブラウザ: レスポンス
Access-Control-Allow-Origin: https://www.mysite.com
3. ブラウザ: レスポンス確認
- 許可されたオリジンなら → データ配信 ✅
- 許可されていなければ → CORSエラー ❌