제 블로그의 모든 글은 IMHO로 쓴 것입니다. 잘못된 부분이 있으면 덧글을 통해서 소통을 하면 더 좋은 글로 발전이 될 수 있을 것 같습니다. 그렇지만 소통을 할 때 서로의 감정을 존중하는 선에서 해주셨으면 좋겠습니다. 감사합니다:) —
cors는 어떤 것일까?
브라우저 측에서 일어나는 보안으로 호스트 웹 페이지와 다른 오리진의 서버에 요청을 날릴 때 검증을 한 후 응답 값을 받아들인다.
어떤 위험 때문에 하는 것 일까?
브라우저가 하이재킹을 당하거나, 맹목적으로 악성 코드를 다운로드 할 수 있다.
그래서 대부분의 브라우저는 해당 보안 수칙을 따르고 있다.
보통 CDN 같이 웹사이트는 해당 호스트 서버가 아닌 다른 서버에 요청을 날리는 상황에 자주 일어난다.
cors 를 다루는 법
Simple Request와 Simple Request가 아닌 것들로 나뉜다.
Simple Request인 것
- GET, HEAD method
- POST with Content-Type: application/x-www-form-urlencoded, multipart/form-data, or text/plain.
Simple Request가 아닌 것
- Content-Type: application/json
- Custom header
Simple Request를 다루는 법
Simple Request는 Response 헤더에 Access-Control-Allow-Origin: *
를 추가해주면 된다.
Simple Request가 아닌 곳
Simple Request에 해당되지 않은 것들은 preflighted request를 날린다. preflight request
- 진짜 요청 전에 인증 헤더를 전송하여 서버의 허용 여부를 미리 체크하는 테스트 요청
- OPTIONS 메소드를 사용하여 실제 요청이 안전한지 검사(요청이 서버의 상태를 변경할 위험성이 있는가를 검사)하는 요청을 먼저 날린다.
- django에서 실제로 이렇게 온다.
cors는 그럼 서버에 요청이 안오는 것일까?
그렇지는 않다. 서버에 요청은 제대로 전달이 되고 브라우저에 답도 보낸다. 단지 응답을 브라우저에서 막는 것이다.
https://www.codecademy.com/articles/what-is-cors