🔒 HTTPSとCORSを理解する
このページで学ぶこと
- HTTPSとHTTPの違いがわかる
- CORSとは何か、なぜエラーが起きるかがわかる
- CORSエラーが出たときに対処できる
HTTPS とは
HTTP の通信は暗号化されていません。喫茶店の Wi-Fi など、同じネットワーク上にいる人に通信内容を盗み見られる可能性があります。
HTTPS(HTTP + TLS)は通信を暗号化します。
現代の Web サービスは必ず HTTPS を使います。
Vercel や Supabase などのサービスは、デプロイすると自動で HTTPS になります。
CORS とは
CORS(Cross-Origin Resource Sharing)は、異なるオリジン間のリクエストを制御する仕組みです。
オリジンとは プロトコル + ドメイン + ポート番号 の組み合わせです。
| URL | オリジン |
|---|---|
http://localhost:3000 | http://localhost:3000 |
http://localhost:4000 | http://localhost:4000(別オリジン) |
https://example.com | https://example.com |
なぜ CORS が必要か
悪意のあるサイトが、あなたのブラウザを使って別のサービスにリクエストを送る攻撃(CSRF)を防ぐためです。
ブラウザは「知らないオリジンからのリクエストはブロックする」というルールを持っています。
CORS エラーが起きる典型的な状況
解決方法
サーバー側で「このオリジンからのリクエストは許可する」と明示します。
Next.js API Routes の場合:
// pages/api/hello.js
export default function handler(req, res) {
// 特定のオリジンを許可する
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:3000')
res.status(200).json({ message: 'Hello!' })
}Supabase を使う場合
Supabase のダッシュボードで許可するオリジンを設定できます。
開発中は自動でlocalhostが許可されていることが多いです。
CORSエラーに遭遇したら
開発中によく見るエラーです。慌てず対処しましょう。
Access to fetch at 'http://...' from origin 'http://localhost:3000'
has been blocked by CORS policyチェックリスト:
- リクエスト先のサーバーで CORS の設定がされているか
- 許可するオリジンに自分の URL(
http://localhost:3000など)が含まれているか - プリフライトリクエスト(OPTIONS)への対応が必要か
確認しよう
- HTTPS と HTTP の違いを説明できる
- オリジンとは何かを説明できる
- CORS エラーが出たとき、なぜ起きているかがわかる
AIに聞いてみよう
「CORSのプリフライトリクエストとは何ですか?初心者向けに説明してください」
次のステップ
ここまでで「Web・プログラミング基礎」は完了です。お疲れさまでした!
メンターに「基礎が終わりました」と連絡して、コースの次のステップに進みましょう。
→ Webコースの人: Webコースへようこそ
→ Flutterコースの人: なぜFlutterを使うのか
Last updated on