항해99 5주 차 WIL

홍당무·2022년 12월 19일
0

CORS(Cross-Origin Resource Sharing)

Origin :한국말로 '출처' 라고 하며, URL, 도메인 등과 비슷해 보이지만 엄연히 의미가 다르며 URL에서 프로토콜, 도메인, 포트 번호를 합친 부분이다.

정의

다른 출처의 리소스 공유에 대한 허용/비허용 정책

개발과정에서 다른 출처 간의 상호작용을 해야하거나, 실무적으로 다른 회사의 서버 API를 이용해야 하는 상황 등에서 예외 사항으로 CORS 정책을 허용하는 리소스에 한해 다른 출처라도 받아들인다는 것이다.

SOP(Same Origin Policy)

정의

한국말로 '동일 출처 정책' 이라고 부르며, 다른 Origin으로 요청을 보낼 수 없도록 금지하는 브라우저의 기본적인 보안 정책이다. 즉, 동일한 Origin으로만 요청을 보낼 수 있게 하는 것이다. 그러나 기술이 발달함에 따라 서로 다른 Origin끼리 데이터를 주고 받아야 하는 일이 많아졌고, 이로 인해 SOP는 별도의 예외 사항을 두게 되었다.

즉, CORS(Cross Origin Resource Sharing)는 다른 Origin으로 요청을 보내기 위해 지켜야 하는 정책으로, 원래대로라면 SOP에 의해 막히게 될 요청을 풀어주는 정책이라고 볼 수 있다.

CORS 동작 원리

브라우저는 다른 Origin으로 요청을 보낼 때 Origin 헤더에 자신의 Origin을 설정하고, 서버로부터 응답을 받으면 응답의 Access-Control-Allow-Origin 헤더에 설정된 Origin의 목록에 요청의 Origin 헤더 값이 포함되는지 검사하는 것뿐이다. 즉, CORS 요청을 위해서는 서버에서 응답의 Access-Control-Allow-Origin 헤더에 허용되는 Origin의 목록 혹은 와일드카드(*)를 설정해주면 된다. 이것이 기본적인 CORS 정책이다.

단순 요청(Simple Request)

위 조건을 만족하는 단순 요청은 '안전한 요청'으로 취급된다. 프리플라이트 요청이 필요 없이 단 한 번의 요청만을 전송한다.

프리플라이트 요청 (Preflight Request)

단순 요청의 조건에 벗어나는 요청의 경우 프리플라이트 요청을 보내서 실제 요청이 전송하기에 안전한지 확인한다. 만약 안전한 요청이라고 확인이 된다면, 그때서야 실제 요청을 서버에게 보내게 된다. 따라서 총 2번의 요청을 보낸다.

프리플라이트 요청의 특징

프리플라이트 요청에 대한 서버의 응답


인증 정보를 포함한 요청 (Credentialed Request)

인증 정보(Credential)란 쿠키(Cookie) 혹은 Authorization 헤더에 설정하는 토큰 값 등을 일컫는다.

만약 이러한 인증 정보를 함께 보내야 하는 요청(Credentialed Request)이라면, 별도로 따라줘야 하는 CORS 정책이 존재한다.

Reference

https://it-eldorado.tistory.com/163

https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-CORS-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95-%F0%9F%91%8F#3._CORS(Cross-Origin_Resource_Sharing)_-_%EA%B5%90%EC%B0%A8_%EC%B6%9C%EC%B2%98_%EB%A6%AC%EC%86%8C%EC%8A%A4_%EA%B3%B5%EC%9C%A0

profile
공부하는 백엔드 개발자

0개의 댓글