페르소나 프로젝트를 진행하다가 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