Appearance
HTTP Request Methods
HTTP 메서드는 "클라이언트가 서버의 자원에 대해 무엇을 하려는지"를 표현한다.
주요 메서드
| Method | 의미 | Safe | Idempotent |
|---|---|---|---|
| GET | 리소스 조회 | Yes | Yes |
| HEAD | GET과 동일한 의미이되 본문 없이 헤더만 조회 | Yes | Yes |
| POST | 리소스 생성, 처리 요청, 명령 실행 | No | No |
| PUT | 리소스를 요청 본문으로 대체 | No | Yes |
| PATCH | 리소스 일부 수정 | No | 구현에 따라 다름 |
| DELETE | 리소스 삭제 요청 | No | Yes |
| OPTIONS | 지원 메서드/통신 옵션 조회 | Yes | Yes |
| CONNECT | 프록시를 통한 터널 생성 | No | No |
| TRACE | 요청 경로 진단용 loop-back | Yes | Yes |
메서드별 정리
GET
리소스를 조회한다.
- 서버 상태를 바꾸지 않는 것이 원칙이다.
- 쿼리 문자열을 통해 필터, 정렬, 페이지네이션 조건을 전달할 수 있다.
HEAD
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는 일반적으로 멱등하지 않다.