웹 기술 기초
https://app.example.com 페이지의 JavaScript가 fetch를 사용하여 https://api.example.net/orders로 Content-Type: application/json 본문을 붙인 POST 요청을 보내려 한다. 이때 CORS의 동작으로 올바른 것은?
- ACORS는 브라우저 이외에서도 작동하므로, 서버의 허가가 없으면 명령줄 도구에서 보낸 POST도 네트워크 도중에서 차단된다
- B브라우저는 먼저 OPTIONS 메서드로 사전 확인(프리플라이트)을 보내고, 서버가 헤더로 허가를 돌려준 경우에만 본래의 POST를 보낸다
- C다른 출처로 가는 요청은 항상 확인 없이 보내지며, 서버가 응답에 아무것도 붙이지 않아도 페이지의 JavaScript는 응답을 읽을 수 있다
정답과 해설 보기
정답: B. 브라우저는 먼저 OPTIONS 메서드로 사전 확인(프리플라이트)을 보내고, 서버가 헤더로 허가를 돌려준 경우에만 본래의 POST를 보낸다
CORS는 동일 출처 정책으로 제한되어 있는, 다른 출처로의 요청과 그 응답의 읽기를 서버가 허가한 범위에서 인정하는 구조입니다. Content-Type이 application/json인 POST는 단순한 폼 전송으로는 만들 수 없는 종류의 요청이므로, 브라우저는 먼저 OPTIONS로 사용할 메서드와 헤더를 전하여 허가를 확인합니다. 서버의 응답에 Access-Control-Allow-Origin 등의 허가가 없으면 브라우저는 본래의 요청을 보내지 않습니다. CORS는 브라우저가 지키는 규칙이므로, 서버는 따로 인증이나 권한 확인으로 자신을 지켜야 합니다.