본문 바로가기

컴퓨터공학

CORS가 무엇인가.

CORS 는 cross origin resource sharing 즉 url이 다른 출처간 자원 공유이다.

이게 왜 만들어 졌는가? 하면은 사실 우리를 도와주는 것이다.
원래 브라우저는 보안상 다른 url웹 사이트 간 자원 공유를 금지시켰다. 이는 SOP 즉 same origin policy 동일한 서버간 에만 자원요청을 주고 받을 수있다. 왜냐면
악성 사이트가 자바스크립트 파일을 보내서 내 브라우저에 저장된 토큰 또는 쿠키가지고 해당 서버에 무슨 일을 시킬지 모른다. 그렇기에 교차출처는 보안상 매우 위험한 일이었다.
허나 네이버 지도 카카오 지도 등 API를 따와야만 하는 일을 겪어보고 또는 다른 앱 웹에서 사용해보았을 것이다. 이 때문에 CORS가 허용해준다.
이는 어떻게 이루어지냐? 브라우저는 다른출처간에 요청을할때 origin이라는 헤더를 붙인다 이 헤더는 스키마 도메인 포트가 담긴다. 여기서 스키마는 http ftp smtp등 프로토콜 종류이다. 요청받은 곳에서는 지정된 access control allow origin 정보를 실어 보낸다.

origin에서 보낸 값이 서버에서 답장 값으로 보낸 access control allow origin에 있다면 안전한 요청으로 간주하고 응답 데이터를 받아온다. 없다면 CORS 에러 메세지를 보낸다.

더욱이 사용자 식별 정보가 담긴 토큰 등에 대해서는 더욱 엄격하다.

먼저 Simple request 즉 HTTP 메솓가 GET POST 인 경우, 보내는쪽은 crediental이라는 항목을 만들어 true값을 넣어서 보낸다. 받는 쪽 역시 보내는 쪽의 출처 그리고 웹 페이지를 정확히 명시한 다음 access control allow crediental 항목을 true로 맞춰 주어야 한다. 

다음 Preflight request 즉 HTTP 메소드가 PUT DELETE인 경우 본 요청을 보내기 전 preflight 요청을 먼저 보내서 본 요청이 안전한지를 확인하고 본 요청을 보낸다. 아무래도 PUT 과 DELETE 는 서버의 데이터를 변경할 수 있기에 좀 더 절차를 두었다.