OPTIONS

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

HTTP OPTIONS 메서드는 주어진 URL 또는 서버에 대해 허용된 통신 옵션을 요청합니다. 클라이언트는 이 방법으로 URL을 지정하거나 별표(*)를 지정하여 전체 서버를 참조할 수 있습니다.

요청에 본문이 있음 아니요
성공적인 응답에 본문이 있음
안전함
멱등성
캐시 가능 아니요
HTML 폼에서 허용됨 아니요

구문

http
OPTIONS /index.html HTTP/1.1
OPTIONS * HTTP/1.1

예제

허용된 요청 매서드 식별하기

서버가 지원하는 요청 방법을 찾으려면 아래와 같이 curl 명령어을 사용하여 OPTIONS 요청을 보내볼 수 있습니다.

bash
curl -X OPTIONS https://example.org -i

그럼 응답은 허용된 메서드를 가지고 있는 Allow 헤더가 있습니다.

http
HTTP/1.1 204 No Content
Allow: OPTIONS, GET, HEAD, POST
Cache-Control: max-age=604800
Date: Thu, 13 Oct 2016 11:45:00 GMT
Server: EOS (lax004/2813)

CORS 사전 요청

CORS에서 사전 요청OPTIONS 메서드를 통해 전송되므로 요청을 보낼 수 있는 경우라면 서버가 응답할 수 있습니다. 이번 예제에서는 다음 매개변수에 대한 권한을 요청합니다.

http
OPTIONS /resources/post-here/ HTTP/1.1
Host: bar.example
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Connection: keep-alive
Origin: https://foo.example
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-PINGOTHER, Content-Type

이제 서버는 아래와 같은 상황에서 요청을 수락할 때 응답할 수 있습니다. 이 예제에세 서버의 응답은 다음과 같습니다.

Access-Control-Allow-Origin

https://foo.example 출처는 다음을 통해 bar.example/resources/post-here/ URL을 요청할 수 있습니다.

Access-Control-Allow-Methods

POST, GET 그리고 OPTIONS는 이 URL에 허용되는 메서드입니다. (이 헤더는 Allow 헤더와 유사하지만 CORS에만 사용됩니다.)

Access-Control-Allow-Headers

X-PINGOTHERContent-Type은 URL에 대해 허용되는 요청 헤더입니다.

Access-Control-Max-Age

위 권한은 86,400초(1일) 동안 캐시될 수 있습니다.

http
HTTP/1.1 200 OK
Date: Mon, 01 Dec 2008 01:15:39 GMT
Server: Apache/2.0.61 (Unix)
Access-Control-Allow-Origin: https://foo.example
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-PINGOTHER, Content-Type
Access-Control-Max-Age: 86400
Vary: Accept-Encoding, Origin
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive

상태 코드

200 OK와 204 No Content 모두 허용되는 상태 코드이지만 일부 브라우저는 204 No Content가 실제 리소스에 적용된다고 잘못 판단하여 리소스를 가져오기 위한 다음 요청을 보내지 않습니다.

명세서

Specification
HTTP Semantics
# OPTIONS

브라우저 호환성

BCD tables only load in the browser

같이 보기