제로하우스

[Web] Preflight Request란? 본문

Web

[Web] Preflight Request란?

송제로투 2022. 5. 27. 16:56

Preflight Request(사전 요청)란?

 

교자 출처 리소스 공유(CORS) Preflight Request는 본격적인 교차 출처 HTTP 요청 전에 서버 측에서 그 요청의 메서드와 헤더에 대해 인식하고 있는지를 체크하는 것이다.

Preflight Request는 HTTP Method(OPTIONS)이며, 본 요청을 보내기 전에 먼저 본 요청에 대한 권한을 확인하는 작업을 통해, 본 요청이 유효한지 체크할 수 있다. Preflight Request는 다음 3가지의 HTTP Request Header를 사용한다.

  • "Access-Control-Request-Method"
  • "Access-Control-Request-Headers"
  • "Origin"

Access-Control-Max-Age 헤더를 이용하면, 사전 요청 결과가 얼마 동안 캐시될 지를 나타낼 수 있다. 아래는 10분 동안 사전 요청 결과를 캐시하는 예시이다.

Access-Control-Max-Age: 600

 

Simple Request란?

 

반대로, 위와 같은 CORS Preflight가 트리거 되지 않는 일부 요청이 있는데, 이를 Simple Request(단 순 요청)라고 한다.단순 요청에 충족되는 요청 조건은 아래와 같다.

  1. 다음 중 하나의 Method
    • GET
    • HEAD
    • POST
  2. User Agent가 자동으로 설정한 Header외에, 수동으로 설정할 수 있는 헤더는 오직 Fetch 명세에서 "CORS-safelisted request-header"로 정의한 Header 뿐.
    • Accept
    • Accept-Language
    • Content-Language
    • Content-Type (아래 추가 요구 사항에 유의)
    • DPR
    • Downlink
    • Save-Data
    • Viewport-Width
    • Width
  3. Content-Type 헤더는 다음의 값들만 허용
    • application/x-www-form-urlencoded
    • multipart/form-data
    • text/plain
Comments