OPTIONS probe
브라우저가 Origin, 요청 method, 요청 header 목록을 먼저 보낸다.
safelisted 조건을 벗어난 CORS 요청은 OPTIONS 왕복을 먼저 수행한다. 서버가 허용 범위를 명확히 답해야 실제 GET/POST/PUT 요청이 이어진다.
브라우저가 Origin, 요청 method, 요청 header 목록을 먼저 보낸다.
서버는 허용 origin, methods, headers를 응답 헤더로 명시한다.
브라우저는 허용 결과를 잠시 캐시할 수 있지만 구현별 상한이 있다.
허용되면 실제 요청을 보내고, 응답 노출 여부는 다시 CORS 헤더로 판단한다.
OPTIONS /orders Origin: https://app.example Access-Control-Request-Method: POST Access-Control-Request-Headers: content-type, authorization
POST를 보내려면 preflight 응답에 POST가 포함되어야 한다.
Authorization을 쓰면 서버가 그 이름을 명시해야 한다.
서버 간 통신 차단이 아니라 브라우저가 JavaScript 노출을 막는 규칙이다.
Max-Age를 늘리기 전에 허용 origin, method, header가 과하게 넓지 않은지 확인해야 한다. Authorization을 붙인 요청은 CSRF와 별도로 토큰 노출, Origin 검증, credentials 정책을 함께 봐야 한다.