fetch が CORS エラーで失敗した。対処として正しいのはどれ?
正答
- 利用者のブラウザ設定でセキュリティ機能を無効にしてもらう
- fetch のリクエストヘッダーに Access-Control-Allow-Origin を付ける
- API サーバーのレスポンスに Access-Control-Allow-Origin を付ける
- フロントエンドの fetch に mode: 'no-cors' を指定する
解説
CORS(オリジン間リソース共有)は、別オリジンへのリクエストの結果をブラウザが JavaScript に渡してよいかを、サーバーのレスポンスヘッダー Access-Control-Allow-Origin で判断する仕組み。したがって直すのは API サーバー側の設定。Access-Control-Allow-Origin はレスポンス用のヘッダーなので、リクエストに付けても意味が無く、むしろプリフライトで拒否される。mode: 'no-cors' はエラーを隠すだけでレスポンス本文を読めなくなる。ブラウザ設定の変更は利用者全員には頼めない。
この問題を含む HTTP・Web 基礎 のテストを制限時間つきで解く
HTTP・Web 基礎クイズへ