Next.js × FastAPI 구성에서 CORS로
경위
 여기 에서 소개하겠습니다만, 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를 호출하면 아래와 같은 오류가 발생했습니다.
 
Cross-Origin Resource Sharering의 약어로 일본어 번역하면 "오리진 간 자원 공유"라고합니다.
원래 오리진이 무엇이라고 하면 페이지의 스킴(프로토콜), 호스트(도메인), 포트에 의해 정의되는 것으로, 이것들이 모두 일치하는 것이 같은 오리진이라고 말할 수 있습니다.
보안상의 이유로 브라우저는 스크립트에서 시작하는 오리진 간 HTTP 요청을 제한합니다.
이것으로부터 Next.js와 FastAPI로 각각 기동하고 있는 경우는 port는 다르므로 이 제한을 받게 됩니다.
발생하는 오류
Next.js를 http://127.0.0.1:3000로 시작하고 fastAPI의 http://localhost:8000/users/create API를 호출하면 아래와 같은 오류가 발생했습니다.
 
오류 메시지
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=["*"])
 끝에
보다 좋은 대응 방법이 있을지도 모릅니다만, 일단은 상기에서 대응했습니다.
모든 것을 인정해 버릴 수 있는지 등은 앞으로 생각해 가고 싶다고 생각합니다.
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(Next.js × FastAPI 구성에서 CORS로), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/kihara-takahiro/items/a52a99f4d0f66d4b1dfe
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
from starlette.middleware.cors import CORSMiddleware
    app.add_middleware(
      CORSMiddleware,
      allow_origins=["*"],
      allow_credentials=True,
      allow_methods=["*"],
      allow_headers=["*"])
보다 좋은 대응 방법이 있을지도 모릅니다만, 일단은 상기에서 대응했습니다.
모든 것을 인정해 버릴 수 있는지 등은 앞으로 생각해 가고 싶다고 생각합니다.
Reference
이 문제에 관하여(Next.js × FastAPI 구성에서 CORS로), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kihara-takahiro/items/a52a99f4d0f66d4b1dfe텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)