Develop/Django

[Django][오류]CORS에러

dawonny 2021. 8. 21. 15:05
728x90
반응형

페르소나 프로젝트를 진행하다가 CORS 에러 라는게 떴다.

동기가 아래 게시물을 보고 해결했다고 함.(settings.py 수정)

 

나도 한번 보려고 한다.

 


CORS 가 뭔가 하면,,

Cross Origin Resource Sharing 의 약자로

도메인 또는 포트가 다른 서버의 자원을 요청하는 메커니즘 이라고 함.

 

최근 대부분의 웹 브라우저는 js 를 이용한 AJAX 통신을 통한 데이터 송수신을 하는데

다른 도메인을 가진 서버의 url을 호출해 데이터를 가져오려고 하는 경우에

보안 문제인 Cross Domain 이슈를 발생시킨다고 함.

 

(만약 우리 웹 서비스에서 사용하려고 다른 서브 도메인을 가진 API 서버를 구축했는데

우리가 아닌 다른 웹 서비스에서 이 API 서버에서 맘대로 접근하고 그러면 안되니까)

 

 

www.example.co.kr  도메인에서 www.tistory.com  도메인의 url 은 AJAX로 호출할 수가 없는거임.

js는 동일 출처 정책이라는 걸 둬서 

도메인이 다른 서버로 부터 요청을 받으면 보안문제로 간주, CORS 이슈를 발생시켜서 이걸 차단한다.

 

CORS 문제는 다른 도메인의 서버로부터 요청이 들어왔을때

헤더에 접근을 허락하는 내용이 없으면 발생한다.

 

클라이언트와 서버가 같은 도메인, 포트를 사용하면 좋지만 이게 아니라면

외부 서버에서 보내는 요청의 헤더에 cross origin HTTP 요청을 허가해서 접근을 허락하는 내용을 추가하면 됨,

 

 


 

pip install django-cors-headers

 

-> 다른 서버에서로부터 내 서버 앱으로 들어오는 브라우저를 통한 요청을 허가

 

 

그담엔 installed_apps에 corsheaders를 추가해주기

INSTALLED_APPS = [
    ...
    'corsheaders',
    ...
]

middleware class 도 추가해주기

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware', # <- 가능한 높게 위치시켜야 한다.
    'django.middleware.common.CommonMiddleware', 
    ...
]

그담엔 settings.py에서 미들웨어의 동작을 구성한다.

CORS_ORIGIN_ALLOW_ALL = True # <- 모든 호스트 허용

# or 

CORS_ORIGIN_WHITELIST = (
    "https://example.com",
    "https://sub.example.com",
    "http://localhost:8080",
    "http://127.0.0.1:9000"
)

 

Reference

 

 

https://oen-blog.tistory.com/46

 

[Django] 장고 CORS 크로스 도메인 이슈

Django로 API 서버를 만드는데 cors에러가 떴다 ... Cross Domain 이슈가 발생한건데, 이 문제는 왜 발생하는 걸까 ? CORS CORS는 Cross Origin Resource Sharing의 약자로 도메인 또는 포트가 다른 서버의 자원을..

oen-blog.tistory.com

 

728x90
반응형