본문 바로가기
Python

Python - FastApi Cross-Origin Resource Sharing (CORS) 이해/해결

by 올엠 2022. 7. 25.
반응형

CORS(교차 출처 리소스 공유)오류는 보안적으로 존재하는 브라우저의 조치라도 할 수 있다.
CORS는 브라우저가 리소스 로드를 불러들일때 현재 도메인이 아닌 다른 출처(도메인, 체계 또는 포트)로 요청할때 발생하는 보호 조치이다.
즉  다른 출처(도메인, 체계 또는 포트)라는 서버에서 허용된 요청이라는 정보를 HTTP 헤더 기반으로 제공하는 메커니즘이다.

A 서버가 B서버에 요청했을때 B서버가 실제 요청을 허용하는지 확인하기 위해 브라우저가 교차 출처 리소스를 호스팅하는 서버에 Preflighted(프리플라이트) 요청을 하는 메커니즘에 의존한다.
해당 Preflighted에서 브라우저는 실제 요청에 사용될 HTTP 메서드와 헤더를 나타내는 헤더를 보내야 한다.
이때 사용하는 헤더가 Access-Control-Allow-Origin이다.
Access-Control-Allow-Origin을 통해 앞서 요청한 브라우저 페이지가 허용된 요청인지를 확인하게 되며
본 헤더에 정보가 없는경우 허용되지 않은 요청으로 판단하여 요청된 내용을 브라우저가 거절하게 된다.

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

app = FastAPI()

origins = [
    "http://localhost.asecurity.dev",
    "https://localhost.localhost.dev",
    "http://localhost",
    "http://localhost:8080",
]

app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

만약 모든 도메인 요청을 허용하고자 한다면 아래와 같이 별표를 추가하면 된다.

Access-Control-Allow-Origin: *

댓글0