네트워크/HTTP

HTTP 메서드: OPTIONS

shimdh 2025. 3. 3. 10:29
728x90

OPTIONS 메서드는 HTTP 프로토콜에서 특정 리소스가 지원하는 HTTP 메서드를 확인하는 데 사용되는 요청 방식입니다.
이는 서버가 해당 리소스에 대해 어떤 메서드를 허용하는지를 클라이언트에게 알리며,
특히 CORS(Cross-Origin Resource Sharing) 정책을 검증하는 데 필수적인 역할을 합니다.

이번 글에서는 OPTIONS 메서드의 개념, 주요 목적, 요청 구조 및 실용적인 활용 사례를 심층적으로 살펴보겠습니다.


1. OPTIONS 메서드란?

OPTIONS 메서드는 특정 리소스가 지원하는 HTTP 메서드와 서버의 통신 옵션을 확인하는 데 사용되는 HTTP 요청 방식입니다.
이 요청 방식은 서버가 허용하는 HTTP 메서드를 사전에 알아보고, 클라이언트가 어떤 요청을 보낼 수 있는지를 확인하는 역할을 합니다.

📌 OPTIONS 요청의 기본 형식:

OPTIONS /resource HTTP/1.1
Host: www.example.com
  • /resource → 허용된 HTTP 메서드를 확인할 특정 리소스의 URI.
  • 서버는 Allow 헤더를 포함한 응답을 반환하여 해당 리소스에서 지원하는 메서드를 알려줌.

💡 OPTIONS 메서드의 핵심 개념:

  • 클라이언트가 사용할 수 있는 HTTP 메서드를 미리 확인 가능.
  • 서버의 CORS 정책을 검사하여 교차 출처 요청이 허용되는지 확인.
  • 데이터를 변경하지 않으며, 단순히 서버의 지원 상태를 조회하는 역할.

2. OPTIONS 메서드의 주요 목적

1️⃣ 서버가 지원하는 HTTP 메서드 확인

📌 OPTIONS 요청을 통해 특정 엔드포인트가 허용하는 HTTP 메서드를 확인할 수 있음.

  • 클라이언트가 특정 API 엔드포인트에 대해 GET, POST, PUT, DELETE 등의 메서드를 사용할 수 있는지 확인하는 용도로 활용됨.
  • RESTful API를 사용할 때, 지원되지 않는 요청을 사전에 차단하여 불필요한 오류를 방지할 수 있음.

📌 예제 (사용 가능한 HTTP 메서드 확인 – REST API 활용)

OPTIONS /users HTTP/1.1
Host: api.example.com

📌 서버 응답 (해당 리소스에서 허용된 메서드 목록 반환)

HTTP/1.1 204 No Content
Allow: GET, POST, DELETE, HEAD
  • Allow: GET, POST, DELETE, HEAD → 해당 엔드포인트(/users)에서 허용된 HTTP 메서드 목록 제공.
  • 클라이언트는 이 응답을 기반으로 허용된 메서드만 사용할 수 있도록 요청을 구성 가능.

💡 API 문서 없이도 OPTIONS 요청을 통해 지원되는 HTTP 메서드를 즉시 확인 가능.


2️⃣ CORS(교차 출처 리소스 공유) 정책 검사

📌 CORS(Cross-Origin Resource Sharing)는 브라우저에서 다른 도메인의 리소스를 요청할 때 발생하는 보안 정책.

  • 다른 출처(origin)에서 자원을 요청할 때, 브라우저는 OPTIONS 요청을 보내어 서버가 해당 요청을 허용하는지 확인함.
  • 서버는 응답을 통해 Access-Control-Allow-Origin 및 관련 헤더를 반환하여 허용 여부를 결정.

📌 예제 (CORS 사전 요청 – Preflight Request)

OPTIONS /api/data HTTP/1.1
Host: api.example.com
Origin: https://frontend.example.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: Content-Type, Authorization

📌 서버 응답 (CORS 정책 허용 여부 반환)

HTTP/1.1 204 No Content
Access-Control-Allow-Origin: https://frontend.example.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Content-Type, Authorization
  • Access-Control-Allow-Origin: https://frontend.example.com → 해당 출처에서 요청을 허용.
  • Access-Control-Allow-Methods: GET, POST, PUT, DELETE → 허용된 메서드 목록 제공.
  • Access-Control-Allow-Headers: Content-Type, Authorization → 사용할 수 있는 요청 헤더 목록 지정.

💡 OPTIONS 요청을 통해 브라우저가 서버의 CORS 정책을 검증하여 보안성을 확보할 수 있음.


3️⃣ API 및 서버 설정 검증

📌 OPTIONS 요청은 API 개발 및 서버 설정을 확인하는 데 유용.

  • 클라이언트가 API와 올바르게 통신할 수 있는지 테스트할 때 활용 가능.
  • 특정 엔드포인트의 메서드 지원 여부 및 보안 정책을 미리 확인하여 불필요한 요청을 줄일 수 있음.

📌 예제 (서버가 특정 엔드포인트를 허용하는지 확인)

OPTIONS /orders HTTP/1.1
Host: api.example.com

📌 서버 응답 (해당 엔드포인트의 메서드 목록 제공)

HTTP/1.1 204 No Content
Allow: GET, POST, PATCH
  • 클라이언트는 PATCH 요청을 지원하는지 확인하고, 해당 요청을 올바르게 구성할 수 있음.

💡 OPTIONS 요청을 통해 API 사양을 동적으로 확인하여 API 문서 없이도 클라이언트가 대응 가능.


3. OPTIONS 요청의 실제 활용 예시

1️⃣ API 개발 및 문서화 자동화

OPTIONS /users HTTP/1.1
Host: api.example.com

📌 서버 응답 (지원되는 메서드 제공)

HTTP/1.1 204 No Content
Allow: GET, POST, DELETE
  • 개발자가 API 문서를 작성할 때 지원되는 HTTP 메서드를 자동으로 확인 가능.

2️⃣ CORS Preflight 요청 검사

OPTIONS /api/orders HTTP/1.1
Host: api.example.com
Origin: https://frontend.example.com
Access-Control-Request-Method: DELETE

📌 서버 응답 (CORS 정책 확인)

HTTP/1.1 204 No Content
Access-Control-Allow-Origin: https://frontend.example.com
Access-Control-Allow-Methods: GET, POST, DELETE
  • 다른 출처에서 DELETE 요청이 허용되는지 확인 가능.

4. OPTIONS vs. 다른 HTTP 메서드 비교

메서드 목적 응답 본문 포함 캐싱 가능 여부
GET 데이터 조회
POST 데이터 생성
PUT 데이터 수정
DELETE 데이터 삭제
OPTIONS 지원 메서드 확인

💡 OPTIONS 요청은 응답 본문이 없고, 단순히 서버가 허용하는 메서드 및 보안 정책을 반환하는 역할.


5. 결론

🔹 OPTIONS 메서드는 특정 리소스가 지원하는 HTTP 메서드를 확인하고, 서버의 CORS 정책을 검증하는 역할을 합니다.
🔹 API 문서 없이도 서버에서 지원하는 메서드를 동적으로 확인할 수 있어 개발 및 디버깅에 유용합니다.
🔹 브라우저의 CORS Preflight 요청을 처리하는 데 필수적인 역할을 하며, 웹 보안 정책을 강화하는 데 기여합니다. 🚀

OPTIONS 메서드를 효과적으로 활용하면 API 통신을 최적화하고, 서버와 클라이언트 간의 원활한 상호작용을 보장할 수 있습니다!

728x90

'네트워크 > HTTP' 카테고리의 다른 글

HTTP 상태 코드: 1xx (정보 응답)  (2) 2025.03.03
HTTP 메서드: PATCH  (0) 2025.03.03
HTTP 메서드: HEAD  (0) 2025.03.03
HTTP 메서드: DELETE  (0) 2025.03.03
HTTP 메서드: PUT  (0) 2025.03.03