Skip to content

HTTP Request Methods

HTTP 메서드는 "클라이언트가 서버의 자원에 대해 무엇을 하려는지"를 표현한다.


주요 메서드

Method의미SafeIdempotent
GET리소스 조회YesYes
HEADGET과 동일한 의미이되 본문 없이 헤더만 조회YesYes
POST리소스 생성, 처리 요청, 명령 실행NoNo
PUT리소스를 요청 본문으로 대체NoYes
PATCH리소스 일부 수정No구현에 따라 다름
DELETE리소스 삭제 요청NoYes
OPTIONS지원 메서드/통신 옵션 조회YesYes
CONNECT프록시를 통한 터널 생성NoNo
TRACE요청 경로 진단용 loop-backYesYes

메서드별 정리

GET

리소스를 조회한다.

  • 서버 상태를 바꾸지 않는 것이 원칙이다.
  • 쿼리 문자열을 통해 필터, 정렬, 페이지네이션 조건을 전달할 수 있다.

GET과 동일한 자원에 대해 응답 본문 없이 헤더만 받는다.

  • 캐시 검증
  • 리소스 존재 여부 확인
  • 콘텐츠 길이 확인

같은 용도로 자주 사용된다.

POST

가장 의미 범위가 넓은 메서드다.

  • 새 리소스 생성
  • 서버 측 명령 실행
  • 비멱등 처리

같은 POST를 여러 번 보내면 중복 생성이나 중복 처리 문제가 생길 수 있다.

PUT

대상 리소스를 요청 본문으로 전체 교체하는 의미에 가깝다.

반복 호출해도 기대하는 최종 상태가 같으므로 멱등적이다.

PATCH

리소스의 일부만 수정할 때 사용한다.

PATCH는 표준상 안전하지도 않고, 항상 멱등적인 것도 아니다. 다만 API 설계에 따라 멱등적으로 만들 수는 있다.

DELETE

대상 URI와 연결된 리소스를 제거하도록 요청한다.

서버 구현에 따라 실제 데이터를 완전히 삭제할 수도 있고, 비활성화/아카이브 처리할 수도 있다.

중요한 점은 URI에 연결된 현재 상태를 제거하는 요청이라는 의미다.

OPTIONS

서버 또는 특정 자원이 지원하는 메서드와 통신 옵션을 질의한다.

CORS preflight 요청에도 사용된다.

CONNECT

프록시를 통해 목적지 서버와 TCP 터널을 만들 때 사용한다.

대표적으로 HTTPS 프록시 터널링에서 본다.

TRACE

요청이 어떤 경로로 전달되었는지 진단할 때 사용한다.

보안상 비활성화하는 서버가 많다.


Safe / Idempotent

Safe

조회 중심이며 서버 상태 변경을 의도하지 않는 메서드다.

  • GET
  • HEAD
  • OPTIONS
  • TRACE

Idempotent

같은 요청을 여러 번 보내도 기대하는 최종 상태가 같은 메서드다.

  • GET
  • HEAD
  • PUT
  • DELETE
  • OPTIONS
  • TRACE

POST는 일반적으로 멱등하지 않다.