Method
HTTP 메서드는 클라이언트가 서버에게 요청의 목적과 종류를 알리기 위해 사용하는 규약이다.
메서드의 주요 속성
Section titled “메서드의 주요 속성”HTTP 메서드를 이해할 때 가장 중요한 두 가지 속성은 안전성(Safety)과 멱등성(Idempotency)이다.
안전성(Safety)
Section titled “안전성(Safety)”서버의 리소스 상태를 변경시키지 않는 성질이다.
- 해당 메서드를 계속 호출해도 서버의 데이터는 변하지 않음
- 읽기 전용 작업에 주로 해당
- 대상: GET, HEAD, OPTIONS, TRACE
멱등성(Idempotency)
Section titled “멱등성(Idempotency)”동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 서버에 미치는 영향이 동일한 성질이다.
- 네트워크 에러 등으로 응답을 못 받았을 때, 안전하게 재요청을 할 수 있는 근거가 됨
- 대상: GET, HEAD, OPTIONS, TRACE, PUT, DELETE
- 비대상: POST (호출할 때마다 새로운 리소스가 생성되거나 상태가 변함)
| 메서드 | 안전성(Safe) | 멱등성(Idempotent) | 바디(Body) 유무 |
|---|---|---|---|
| GET | O | O | X (권장 안 함) |
| HEAD | O | O | X |
| POST | X | X | O |
| PUT | X | O | O |
| PATCH | X | X (일반적으로) | O |
| DELETE | X | O | X (권장 안 함) |
주요 메서드 종류
Section titled “주요 메서드 종류”리소스를 조회하기 위해 사용한다.
- 서버에 전달할 데이터는 쿼리 스트링(Query String)을 통해 전달
- 캐싱이 가능하여 성능 최적화에 유리
- 브라우저 히스토리에 남고 북마크 가능
GET과 동일하지만 응답 본문(Body)을 제외하고 헤더(Header)만 반환한다.
- 무거운 리소스를 다운로드하기 전에 용량(Content-Length) 확인
- 리소스의 존재 여부 확인(200 OK vs 404 Not Found)
- 리소스의 변경 여부 확인(Last-Modified, ETag)
리소스를 대체(Replace)하거나, 없으면 생성(Create)할 때 사용한다.
- 클라이언트가 리소스의 전체 위치를 알고 있을 때 사용(예:
/users/1) - 덮어쓰기: 기존 리소스가 있다면 완전히 대체(일부분만 수정하는 것이 아님)
- 멱등성 보장: 같은 데이터로 100번 덮어써도 최종 상태는 같음
리소스를 부분적으로 수정(Partial Update)할 때 사용한다.
- PUT과의 차이점: PUT은 전체 교체, PATCH는 일부 필드만 변경
- 멱등성을 보장하도록 설계할 수도 있으나, 기본적으로는 멱등하지 않음(예:
age + 1같은 연산은 호출 횟수만큼 값이 변함) - HTTP 표준 메서드는 아니었으나 현재는 사실상 표준으로 사용
서버로 데이터를 전송하여 새로운 리소스를 생성하거나 처리를 요청할 때 사용한다.
- 주로 신규 리소스 등록(Create)에 사용
- 데이터는 메시지 바디에 담겨 전송되므로 길이 제한이 없음
- 멱등하지 않으므로, 요청 시마다 새로운 리소스가 생기거나 상태가 변함(예: 결제 요청을 두 번 보내면 중복 결제 발생 가능)
요청이 서버에 도달하기까지의 경로를 진단(Loopback Test)하기 위해 사용한다.
- TRACE 요청을 받은 목적지 서버에서 루프백(loopback) 진단을 시작하여 자신이 받은 요청 메시지를 본문에 넣어 TRACE 응답으로 되돌려줌
- 서버는 요청받은 메시지 전체를 응답 바디에 그대로 담아 반환(
message/http타입) - 보안 취약점 (XST - Cross-Site Tracing): 클라이언트의 쿠키나 인증 헤더가 응답 바디에 그대로 노출되므로, XSS 공격과 결합하여 세션 탈취에 악용될 수 있음
- 최신 브라우저와 서버는 보안상의 이유로 대부분 비활성화되어 있음
- 요청 메시지에 쿠키나 인증 정보가 포함될 수 있어 민감한 정보가 노출될 위험 존재
OPTIONS
Section titled “OPTIONS”대상 리소스에 대해 통신 가능한 옵션(메서드)을 확인하기 위해 사용한다.
- CORS(Cross-Origin Resource Sharing) Preflight: 브라우저가 실제 요청(POST, PUT 등)을 보내기 전에 안전한 요청인지 확인하기 위해 예비 요청으로 사용
- 서버는
Allow헤더에 지원하는 메서드를 담아 응답
DELETE
Section titled “DELETE”리소스를 제거할 때 사용한다.
- 멱등성 보장: 이미 삭제된 리소스를 다시 삭제 요청해도 서버 상태는 ‘삭제된 상태’로 동일(응답 코드는 200에서 404로 바뀔 수 있지만 서버 상태는 변하지 않음)
그 외 확장 메서드
Section titled “그 외 확장 메서드”HTTP는 확장 가능한 프로토콜로 설계되어 있어 필요에 따라 새로운 메서드를 만들어 사용할 수는 있다.