CORS는 Cross-Origin Resource Sharing의 약자로 교차 출처 리소스 공유, 출처가 다른 자원들을 공유한다는 뜻이다. 그럼 출처란 URL의 구성 요소 중에서 Protocol + Host + Port 3가지가 같으면 동일 출처(Origin)라고 한다. 다시 말하면 하나라도 다르면 출처가 다르다(Cross-Origin) 라고 인식하는 것이다.
그럼 이게 왜 필요하냐면 외형적으로 동일한 사이트를 만들기는 어렵지 않다. 그래서 출처에 상관없이 자원을 공유한다면 다른 사이트를 위조해서 사용자의 정보를 탈취하고 이를 통해 원래 사이트에 가짜 요청을 보낼 수가 있게 되는 문제가 생긴다. 예를 들면 은행 사이트를 위조해서 가짜 사이트를 만든 다음에 모르고 접근한 사용자가 있다. 그 사용자는 평소 은행 사이트를 이용하듯이 서비스 이용을 위해 인증을 하는데 이 인증 요청이 가짜 사이트에서 원래 은행 사이트로 보내지면서 인증이 완료 된다. 사용자는 가짜 사이트에 대해 아무런 문제도 느끼지 못할 수 있다. 이 때 가짜 사이트는 진짜 사이트에서 인증을 받아내게 되는데 이러면 다시 가짜 사이트에선 이를 통해 사용자인 척 마음대로 진짜 사이트에 요청을 할 수 있게 된다. 그로인해 사용자가 인지하지 못한 사이에 다른 곳으로 돈을 빼갈 수 있게 되는 것이다. 그래서 출처를 확인할 필요가 있고 그렇다고 무조건 같은 출처로 제한하기에도 불편한 부분이 많기에 CORS를 이용해 제한적으로 허용을 해주는 것이다.
CORS가 어떻게 작동하냐면 웹에서 통신할 때 HTTP프로토콜을 사용하여 요청과 응답을 주고 받는데 이 때 브라우저는 헤더에 Origin 필드에 출처를 담은 요청을 추가하고 서버에 요청을 보낸다. 서버는 현재 Origin 헤더를 확인하고 요청된 데이터와 Access-Control-Allow-Origin 헤더로 응답한다. 그리고 응답을 받은 브라우저가 Access-Control-Allow-Origin을 자신이 보낸 Origin과 비교하여 CORS를 검사하고 유효하지 않으면 그 응답을 사용하지 않으며 에러를 출력한다. 이 외에도 브라우저가 아니라 서버에서 확인 후 에러 메세지로 응답하거나 CORS를 예비 요청 확인 후 본 요청을 보내는 방식 등이 있지만 헤더에 Origin을 담아 서버에 요청을 보내고 확인하는 큰 틀은 같았다.
'오늘 뭐했냐 > 개발에 대한 주저리' 카테고리의 다른 글
23.08.03 쿠키(Cookie)와 세션(Session) (0) | 2023.08.05 |
---|---|
23.08.02 브라우저는 어떻게 보여주는가 (0) | 2023.08.03 |
23.07.31 HTTP 메서드 (0) | 2023.08.01 |
23.07.30 기본키(Primary Key)와 외래키(Foregin Key) (1) | 2023.08.01 |
23.07.29 RDBMS의 정규화 (0) | 2023.08.01 |