6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Next.js × FastAPIの構成でCORSではまる

Last updated at Posted at 2021-01-01

経緯

こちらで紹介させていただいておりますが、Next.jsとFastAPIでNext.jsからAPIをコールするとCORSの設定ではまったので記載させていただきます。

CORSとは

Cross-Origin Resource Shareringの略で日本語訳すると「オリジン間リソース共有」と呼びます。
そもそもオリジンが何かといえば、ページのスキーム(プロトコル)ホスト(ドメイン)ポートによって定義されるもので、これらがすべて一致するものが同一オリジンであると言えます。
セキュリティ上の理由からブラウザーはスクリプトによって開始されるオリジン間HTTPリクエストを制限しています。
このことからNext.jsとFastAPIでそれぞれ起動している場合はportは異なるのでこの制限を受けてしまいます。

発生するエラー

Next.jsをhttp://127.0.0.1:3000で起動しており、fastAPIのhttp://localhost:8000/users/createのAPIをコールしたら下記のようなエラーが発生しました。
エラー画像.PNG

  • エラーメッセージ
Access to XMLHttpRequest at 'http://localhost:8000/users/create' from origin 'http://127.0.0.1:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

対応方法

FastAPI側からオリジン間共有を認めるように設定する必要があります。
生成したFastAPIのインスタンスに対して下記のように設定することで対応しました。


from starlette.middleware.cors import CORSMiddleware
    app.add_middleware(
      CORSMiddleware,
      allow_origins=["*"],
      allow_credentials=True,
      allow_methods=["*"],
      allow_headers=["*"])

終わりに

もっと良い対応方法があるかもしれませんが、いったんは上記で対応しました。
すべてを認めてしまってよいのか等は今後考えていきたいなと考えています。

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?