사전 승인없이 바로 본 요청을 보내는 방식.
GET
, POST
, HEAD
만 허용Accept
, Content-Type
(단, application/x-www-form-urlencoded
, multipart/form-data
, text/plain
만 허용)Authorization
, User-Agent
등 기본 헤더만 사용 가능Content-Type
이 application/json
이면 Preflight가 필요 (예외: application/x-www-form-urlencoded
는 Simple Request)대체로 REST API가 Content-Type
으로 application/json
을 사용하기 때문에 사실상 지켜지기 어려운 조건이고, 거의 대부분은 Preflight 방식으로 처리한다.
서버에 실제 요청을 보내기 전에, 이 요청이 유효한지(허용되는지)를 판단하는 예비요청을 먼저 보낸후, 허용되었다면 실제 본 요청을 보내는 방식
3-way-handshake처럼 사전에 확인하고 승인하는 절차를 거친다.
Preflight는 서버에게 '이 요청을 보내도 괜찮을까요?'라고 물어보는 SYN 같은 과정이다. 서버가 괜찮다고 응답하면, 클라이언트가 본 요청을 보낸다.
크기가 10000인 큰 데이터를 담아 무작정 요청을 보냈는데, 만약 이 요청이 CORS에 위배되는 요청이라면? 서버의 리소스를 낭비하는 꼴이 된다. 이를 방지하기 위해 먼저 요청을 보내어 유효한지를 판단한 후 본요청을 보낸다.
OPTIONS
메서드로 서버에 요청을 보낸다. (이 요청이 허용되는지를 확인하는 예비 요청)Access-Control-Allow-Origin
등의 헤더로 이 요청이 허용되는지를 응답한다.X-Auth-Token
)Content-Type
이 application/json
같은 특정 타입인 경우