Access to fetch has been blocked by CORS policy
ブラウザのCORSポリシーによりクロスオリジンリクエストがブロックされるエラー
概要
Access to fetch at '...' from origin '...' has been blocked by CORS policy は、ブラウザのセキュリティ機能であるCORS(Cross-Origin Resource Sharing)により、異なるオリジンへのリクエストがブロックされた場合に発生するエラーです。
エラーメッセージ
Access to fetch at 'https://api.example.com/data' from origin 'http://localhost:3000'
has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present
on the requested resource.
Access to XMLHttpRequest at 'https://api.example.com/data' from origin
'http://localhost:3000' has been blocked by CORS policy: Response to preflight
request doesn't pass access control check.
原因
- サーバーがCORSヘッダーを返さない: Access-Control-Allow-Origin ヘッダーがない
- プリフライトリクエストの失敗: OPTIONS リクエストが拒否される
- 許可されていないオリジン: サーバーが特定のオリジンのみ許可
- 許可されていないヘッダー: カスタムヘッダーが許可されていない
- 認証情報の問題: credentials を含むリクエストの設定ミス
解決策(サーバー側)
1. Node.js (Express) での設定
| |
2. Python (Flask) での設定
| |
3. Python (Django) での設定
| |
4. PHP での設定
| |
5. Nginx での設定
| |
6. Apache での設定
| |
解決策(クライアント側)
1. プロキシを使用(開発環境)
| |
| |
2. credentials の正しい設定
| |
3. JSONP(レガシー対応)
| |
デバッグのコツ
ネットワークタブで確認
- ブラウザの開発者ツールを開く
- Network タブを選択
- 失敗したリクエストを確認
- Response Headers で CORS ヘッダーを確認
curl でテスト
| |
JavaScript の他のエラー
この記事は役に立ちましたか?