HTTP OPTIONS

2024. 11. 7. 17:55·Server
반응형

 

Nginx access_log에 OPTIONS 메서드로 요청된 부분이 기록되어 있어 궁금하였다. 확인해보니 몇몇 특정 HTTP 요청 이전에 기록되고 있었다.

 

1. HTTP OPTIONS 메서드?

OPTIONS 메서드는 클라이언트가 서버로부터 특정 리소스에 대해 허용된 메서드와 HTTP 헤더, 인증 요구 사항 등 통신에 필요한 정보를 요청하는 용도로 사용된다. 주로 서버와 클라이언트 간의 CORS (Cross-Origin Resource Sharing) 설정을 확인할 때 사용된다. 즉, 실제 데이터를 가져오지 않고, HTTP 통신이 가능한지 확인하기 위해 사용된다.

 

CORS 미설정: 405 Not Allowed

 

 

CORS 설정: Allow 헤더를 통해 "POST" 요청 지원 확인

 

2. OPTIONS 메서드의 주요 헤더

  • Allow: 서버가 해당 리소스에 대해 허용하는 HTTP 메서드를 응답한다.
    예를 들어 Allow: GET, POST, OPTIONS처럼 표시된다.
  • Access-Control-Allow-Methods: CORS 요청 시, 서버가 클라이언트에게 허용하는 메서드를 응답한다.
    이 헤더는 Prefilght 요청에서 주로 사용된다.
  • Access-Control-Allow-Headers: 클라이언트가 요청에서 사용할 수 있는 헤더 목록을 명시한다.
  • Access-Control-Allow-Origin: CORS 요청을 허용하는 도메인을 지정한다.
    특정 도메인만 허용하거나, 모든 도메인을 허용할 때는 *로 지정한다.

 

3. OPTIONS 메서드의 사용 사례

CORS (Cross-Origin Resource Sharing) Preflight 요청

OPTIONS 메서드는 CORS에서 주로 Preflight 요청으로 사용된다. 특정 조건이 충족될 때, 브라우저는 실제 요청을 보내기 전에 OPTIONS 요청을 통해 서버가 요청을 허용하는지 확인한다. 다음과 같은 경우에 Preflight 요청이 발생한다.

  • Content-Type이 application/json, application/x-www-form-urlencoded 외의 값일 때
  • 커스텀 헤더를 포함할 때 (eg. Authorization, X-Custom-Header... 등)
  • PUT, DELETE, PATCH 메서드를 사용할 때

REST API 메서드 확인

특정 엔드포인트가 어떤 메서드를 지원하는지 알고 싶을 때 OPTIONS 요청을 사용할 수 있다. RESTful API 문서화를 위한 간단한 확인 방법으로 유용하다.

 

4. OPTIONS 메서드의 예외 처리

  • Preflight 요청에서 OPTIONS 요청에 대한 응답이 올바르게 설정되지 않으면, CORS 정책 위반으로 인해 클라이언트에서 에러가 발생할 수 있다.
  • OPTIONS 메서드를 사용하는 경우, 서버는 요청에 대해 200 또는 204 응답을 반환해야 한다.
  • Preflight 요청에서 응답의 Access-Control-Allow-Origin 헤더가 누락되면, 브라우저는 요청을 차단한다.

 

5. 결론

OPTIONS 메서드는 클라이언트와 서버 간의 상호작용 가능 여부를 확인할 때 유용하다. 특히, CORS가 필요한 환경에서 Preflight 요청의 핵심 역할을 하며, Restful API 사용 시 지원되는 메서드를 확인할 수 있는 간편한 방법을 제공한다.

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Server' 카테고리의 다른 글

실시간 통신 Polling, Long Polling, SSE, WebSocket  (0) 2025.04.15
HTTP Header  (0) 2022.08.13
인터넷 통신  (0) 2022.06.27
CentOS7 SELinux 정책 변경, httpd_sys_rw_content_t 설정  (0) 2020.11.30
'Server' 카테고리의 다른 글
  • 실시간 통신 Polling, Long Polling, SSE, WebSocket
  • HTTP Header
  • 인터넷 통신
  • CentOS7 SELinux 정책 변경, httpd_sys_rw_content_t 설정
helperwoo
helperwoo
\ೕ( ・ㅂ・)و /
  • helperwoo
    WooLog
    helperwoo
  • 전체
    오늘
    어제
    • All (52)
      • Web (25)
        • PHP (6)
        • Java (5)
        • Javascript (8)
        • Laravel (2)
        • Spring Boot (0)
        • React.js (1)
        • Electron.js (1)
        • Vue.js (1)
        • Nest.js (1)
      • Mobile (2)
        • Flutter (2)
      • DataBase (4)
        • MySQL (4)
      • Docker (6)
      • Server (5)
      • Git (2)
      • Tool (3)
      • AI (2)
      • Tip (3)
      • Log (0)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      image
      CTE
      git
      deepseek
      dart
      코드
      flutter
      ignorecase
      frankenphp
      챌린지
      with
      http
      docker
      websocket
      알고리즘
      vscode
      recursive
      CLI
      apache
      엘리스
      nginx
      php
      Laravel
      데이터베이스
      ollama
      JavaScript
      프로그래머스
      DB연동
      Compose
      MYSQL
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    helperwoo
    HTTP OPTIONS
    상단으로

    티스토리툴바