수학과의 좌충우돌 프로그래밍

[Django] CORS, Cross-Origin Resource Sharing 본문

웹프로그래밍/DRF

[Django] CORS, Cross-Origin Resource Sharing

ssung.k 2020. 2. 14. 17:30

CORS 란?

제목에서 알 수 있듯이 CORSCross-Origin Resource Sharing 의 줄임말입니다.

Cross-Origin Resource Sharing 는 한국어로 교차 출처 리소스 공유라고 하며 웹 페이지 상의 제한된 리소스를 최초 자원이 서비스된 도메인 밖의 다른 도메인으로부터 요청할 수 있게 허용하는 구조입니다.

django 같은 경우, 기본적으로 8000 포트를 사용하고 있기 때문에 다른 포트를 사용하는 프론트 서버와 통신을 막고 있습니다.

따라서 CORS 를 설정하지 않은 상태로, 프론트 서버에서 통신을 요청하면 다음과 같은 에러를 확인할 수 있습니다.

Access to fetch at 'http://localhost:8000/auth/login' from origin 'http://localhost:3000' has been blocked by CORS policy: No'Access-Control-Allow-Origin'

다행히 django 에서 손쉽게 CORS 설정 할 수 있습니다.

 

CORS in django

우선 파이썬 패키지를 설치해줍니다.

pip install django-cors-headers

 

그 후 settings 에서 몇 가지 설정을 추가해줍니다.

# settings.py

INSTALLED_APPS = [
    ...
    'corsheaders',
]

MIDDLEWARE = [
    ...
    'corsheaders.middleware.CorsMiddleware',
]

 

마찬가지로 settings 에서 원하는 도메인을 추가할 수 있습니다.

CORS_ORIGIN_WHITELIST = (
    'http://localhost:3000',
    'http://127.0.0.1:3000'
)

 

상황에 따라서는 개별적으로 추가하지 않고 전체 도메인에 대해서도 추가가 가능합니다.

CORS_ORIGIN_ALLOW_ALL = True

 

Comments