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 통신을 최적화하고, 서버와 클라이언트 간의 원활한 상호작용을 보장할 수 있습니다!
'네트워크 > 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 |