웹 애플리케이션과 RESTful API 개발에서 클라이언트와 서버 간의 원활한 통신을 위해 HTTP 메서드는 중요한 역할을 합니다. 그중 OPTIONS 메서드는 특정 리소스에 대해 서버가 지원하는 HTTP 메서드를 확인하거나, CORS(교차 출처 리소스 공유, Cross-Origin Resource Sharing) 정책을 처리하는 데 사용됩니다.
OPTIONS 메서드는 실제 데이터를 수정하거나 조회하는 것이 아닌, 서버와의 사전 협상을 위한 용도로 사용됩니다. 특히 브라우저 환경에서 CORS 정책을 준수하기 위해 프리플라이트(Preflight) 요청으로 활용되는 경우가 많습니다.
1. OPTIONS 메서드란?
OPTIONS 메서드는 클라이언트가 특정 URL에서 지원되는 HTTP 메서드와 관련 정책을 확인하기 위해 서버에 보내는 요청입니다.
✅ OPTIONS 메서드의 주요 목적
- 지원되는 HTTP 메서드 확인
- 클라이언트가 특정 엔드포인트(URI)에서 사용할 수 있는 HTTP 메서드(GET, POST, PUT 등)를 파악할 수 있습니다.
- CORS(교차 출처 리소스 공유) 처리
- 웹 브라우저가 다른 도메인의 리소스에 접근하려 할 때, 사전 요청을 통해 서버가 해당 요청을 허용하는지 확인합니다.
- 보안 및 정책 확인
- 서버의 보안 정책을 확인하거나, 특정 요청이 허용되는지 판단하는 데 도움을 줍니다.
📌 OPTIONS 메서드는 데이터를 변경하지 않고, 서버의 메타 정보를 반환하는 용도로 사용됩니다.
2. OPTIONS 요청의 구조
OPTIONS 요청은 일반적으로 헤더(Header)와 함께 특정 리소스의 URI를 포함하여 전송됩니다.
✅ 1) 일반적인 OPTIONS 요청 예시
클라이언트가 특정 엔드포인트(/users
)에서 지원되는 HTTP 메서드를 확인하는 경우:
OPTIONS /users HTTP/1.1
Host: api.example.com
📌 설명:
- 클라이언트는
/users
엔드포인트에서 지원되는 HTTP 메서드를 알고 싶어 합니다. Host
헤더는 요청이 어느 서버로 향하는지 지정합니다.
3. OPTIONS 응답의 구조
OPTIONS 요청이 서버로 전송되면, 서버는 해당 리소스에서 지원되는 HTTP 메서드를 Allow
헤더와 함께 응답합니다.
✅ 1) 일반적인 OPTIONS 응답 예시
HTTP/1.1 204 No Content
Allow: GET, POST, PUT, DELETE
📌 설명:
204 No Content
: 요청은 성공적으로 처리되었지만, 응답 본문(Body)은 필요하지 않음을 의미합니다.Allow: GET, POST, PUT, DELETE
: 이 엔드포인트에서 허용되는 HTTP 메서드를 명시합니다.
4. CORS(교차 출처 리소스 공유)와 OPTIONS 메서드
✅ CORS란?
CORS(Cross-Origin Resource Sharing)는 웹 브라우저가 다른 도메인(origin)에서 리소스를 요청할 때 보안 정책을 결정하는 방식입니다.
- 브라우저는 다른 도메인의 API 요청을 제한하는 기본 정책을 가지고 있으며, 이를 우회하기 위해 OPTIONS 메서드를 활용한 프리플라이트 요청(Preflight Request) 이 필요합니다.
✅ CORS 요청 과정
1️⃣ 클라이언트 요청 (OPTIONS 프리플라이트 요청)
OPTIONS /data HTTP/1.1
Host: api.example.com
Origin: https://frontend.example.com
Access-Control-Request-Method: POST
📌 설명:
- 클라이언트(프론트엔드)는
api.example.com
에POST
요청을 보내기 전에 OPTIONS 요청을 먼저 전송합니다. Origin
: 요청을 보낸 웹사이트의 도메인(출처)을 지정합니다.Access-Control-Request-Method
: 실제 요청에서 사용할 메서드를 명시합니다.
2️⃣ 서버 응답 (CORS 허용 여부 응답)
HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://frontend.example.com
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Max-Age: 3600
📌 설명:
Access-Control-Allow-Origin
: 특정 출처에서의 요청을 허용 (https://frontend.example.com
).Access-Control-Allow-Methods
: 허용되는 HTTP 메서드 목록 (POST
,GET
,OPTIONS
).Access-Control-Allow-Headers
: 요청 시 포함할 수 있는 헤더 지정 (Content-Type
,Authorization
).Access-Control-Max-Age
: 이 설정을 캐싱할 수 있는 시간(초 단위) → 3600초(1시간) 동안 다시 요청할 필요 없음.
5. 실용적인 활용 사례
✅ 1) API에서 허용된 메서드 확인하기
RESTful API를 설계할 때, 클라이언트가 어떤 요청을 보낼 수 있는지 미리 확인하기 위해 OPTIONS 메서드를 사용할 수 있습니다.
📌 예제: API가 지원하는 메서드 조회
OPTIONS /api/users HTTP/1.1
Host: api.example.com
📌 서버 응답
HTTP/1.1 204 No Content
Allow: GET, POST, DELETE
📌 설명:
/api/users
엔드포인트에서는 GET, POST, DELETE 요청만 허용됨.
✅ 2) 클라이언트 애플리케이션에서 CORS 처리하기
프론트엔드가 백엔드 API와 통신할 때, 다른 도메인의 API에 요청을 보낼 경우 OPTIONS 메서드를 활용하여 CORS 프리플라이트 요청을 처리해야 합니다.
📌 클라이언트 요청 (프리플라이트 OPTIONS 요청)
OPTIONS /login HTTP/1.1
Host: api.example.com
Origin: https://myfrontend.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: Content-Type
📌 서버 응답 (CORS 허용 응답)
HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://myfrontend.com
Access-Control-Allow-Methods: POST, OPTIONS
Access-Control-Allow-Headers: Content-Type
📌 설명:
- CORS 정책에 따라 프론트엔드에서 API 요청이 가능하도록 허용됨.
6. OPTIONS 메서드 사용 시 주의사항
✅ 1) OPTIONS 응답에는 응답 본문이 필요 없음
- 일반적으로 204 No Content 상태 코드가 사용되며, 응답 본문(Body)은 필요하지 않습니다.
✅ 2) 서버 보안 설정 필요
- CORS 정책을 잘못 설정하면 원하지 않는 출처(origin)에서 API를 호출할 수 있으므로 보안 설정을 철저히 해야 합니다.
✅ 3) 캐싱 활용 가능
Access-Control-Max-Age
값을 설정하면, 브라우저가 일정 시간 동안 CORS 정보를 캐싱하여 불필요한 OPTIONS 요청을 줄일 수 있습니다.
7. 결론
OPTIONS 메서드는 클라이언트가 서버의 지원하는 HTTP 메서드와 CORS 정책을 확인하는 데 사용되는 중요한 HTTP 메서드입니다.
✔ API의 사용 가능한 메서드를 조회할 수 있습니다.
✔ CORS 프리플라이트 요청을 처리하여 교차 출처 요청을 허용할 수 있습니다.
✔ 불필요한 데이터 전송을 줄이고 보안 정책을 관리하는 데 도움이 됩니다.
💡 OPTIONS 메서드를 올바르게 활용하면, 더욱 안전하고 효율적인 웹 서비스를 구축할 수 있습니다! 🚀
'네트워크 > HTTP' 카테고리의 다른 글
HTTP 상태 코드: 1xx (정보) (0) | 2025.03.05 |
---|---|
HTTP 메서드: HEAD 메서드 (0) | 2025.03.05 |
HTTP 메서드: PATCH 메서드 (0) | 2025.03.05 |
HTTP 메서드: DELETE 메서드 (0) | 2025.03.05 |
HTTP 메서드: PUT 메서드 (0) | 2025.03.05 |