【Vercel】【Next.js】CORSエラーが出ないようにする

エラー

 

VercelへNext.js(v13.4.19、App Router)のアプリケーションをデプロイしました。

動作確認をしていくと、Route Handlers周りでCORSエラーが出たので解決していきたいます

 

エラー文

 

 

CORSポリシーによってブロックされましたー と書いてあるので、CORSエラーですね

 

CORSとは

 

Cross Origin Resource Sharing (オリジン間リソース共有) のこと。

WEBアプリケーションが異なるオリジンからリソースを引っ張ってくること。

 

詳しくは↓をご覧ください

なんとなく CORS がわかる...はもう終わりにする。 - Qiita
概要Access to XMLHttpRequest at ' from origin ' has been…

 

どう解決するか??

 

エラー文にあるとおり、APIのレスポンスヘッダにAccess-Control-Allow-Origin を付与します

また、許可するHTTPメソッドとリクエストヘッダを設定するため、

  • Access-Control-Allow-Methods :GET、POST、OPTIONSを許可
  • Access-Control-Allow-Headers :Content-Typeを許可

も付与します

※許可するメソッドやリクエストヘッダは各自必要なものを設定してください

 

エラー文を見ると、preflight request でエラーになっています。
CORSの場合、事前にOPTIONSリクエストを送ってみて、安全にリクエストを送れるかテストしています。
これがpreflight requestです。なので、OPTIONSリクエストも許可しておきます

 

コード修正

 

next.config.jsでAPIのレスポンスヘッダを設定します

 

公式ドキュメント

next.config.js Options: headers | Next.js
Add custom HTTP headers to your Next.js app.

 

こんな感じに設定すればOK

 

これで無事CORSエラーが出なくなりました、ひと安心です

 

余談

 

next.config.jsで設定しなくても、

各APIのレスポンス時にヘッダを付与することでも解決します

Next.js appルートでのAPI RoutesのCORS設定

 

参考記事

 

next.config.js Options: headers | Next.js
Add custom HTTP headers to your Next.js app.
Next.js と TypeScript で、CORS 問題を解決する - コムテブログ
Next.js と TypeScript での CORS (Cross-Origin Resource Sharing) 問題を解決するための方法を紹介します。
なんとなく CORS がわかる...はもう終わりにする。 - Qiita
概要Access to XMLHttpRequest at ' from origin ' has been…
Next.js appルートでのAPI RoutesのCORS設定

 

コメント

タイトルとURLをコピーしました