본문 바로가기

CS ﹒ Algorithm/(구)Network

네트워크 (4) HTTP 메서드의 종류와 속성

 

1. HTTP 메서드란 ?

 

 

클라이언트가 웹 서버에게 요청의 목적이나 종류를 알리는 수단이다.

1991년 출시된 HTTP 0.9 버전에는 오직 GET 메서드만 있었으나 1996년 HTTP 1.0에서 헤더와 함께 여러 메서드가 추가되었다.

 

 

2. HTTP 메서드의 종류

 

 

한쪽 입장에서 작성하면 종종 헷갈리는 경우가 있어 주요 4가지 메서드는 클라이언트 서버 입장에서 각각 기술하였다.

 

(1) GET

클라이언트 : 원하는 데이터의 정보를 보내 리소스를 조회한다

서버 : 요청 받은 URI의 정보를 검색하여 응답한다. (오직 데이터를 받기만 한다.)

ex ) GET /members

 

(2) POST

클라이언트 : 등록, 생성을 목적으로 서버에 요청을 보낸다.

서버 : 요청된 자원을 생성하고 Location에 새로 작성된 리소스의 URI를 헤더에 포함하여 응답한다.

ex ) POST /members/{id}

 

(3) PUT

클라이언트 : 등록, 생성을 목적으로 서버에 요청을 보낸다. 클라이언트가 리소스의 위치를 지정해서 보낸다.

서버 : 요청된 자원을 등록하거나 수정한다. 일부 수정이 아니라 해당 URI에 있는 모든 리소스를 대체하는 것이다.

ex ) PUT /memvers/{id}

* PUT 메서드는 payload만으로 자원의 전체 상태를 나타낼 수 있을 때만 사용되어야 한다.

 

(4) PATCH

클라이언트 : 등록, 생성을 목적으로 서버에 요청을 보낸다. 클라이언트가 리소스의 위치를 지정해서 보낸다.

서버 : 요청된 자원을 등록하거나 수정한다. 이미 해당 위치에 리소스가 있다면 클라이언트가 보낸 부분에 대해서만 수정된다.

ex ) PATCH /members/{id}

 

(5) DELETE

요청된 자원을 삭제한다.

ex ) Delete /members/{id}

 

(6) CONNECT

대상 리소스에 대한 통신 가능 옵션을 반환한다.

주로 프록시 기능 요청 시 사용한다.

 

(7) TRACE

대상 리소스에 대한 메세지 루프백 테스트를 수행한다.

참고로 TRACE 메서드에는 취약점이 존재한다.

 

(8) OPTIONS

웹 서버에서 지원되는 메서드의 종류를 확인할 수 있다.

그런데 OPTIONS를 지원하지 않으면 의미가 없다..

 

 

 

3. HTTP 메서드의 속성

 

 

HTTP의 대표적인 속석으로는 안전(Safe), 멱등(Idempotent), 캐시 가능 여부(Cacheable)이 있다.

 

3-1. 안전함(Safe)

: HTTP 메서드가 서버의 상태를 바꾸지 않으면 그 메서드는 안전하다고 이야기 한다.

쉽게 얘기하자면, 읽기만 수행하는 메서드는 안전하다.

또한, 모든 안전한 메서드는 멱등성을 가지지만 멱등성을 가진 메서드가 모두 안전한 메서드인 것은 아니다.(PUT, DELETE)

안전한 메서드는 읽기 전용의 의미를 내포하지만 서버가 요청 정보와 통계 등을 읽은 뒤 자신의 상태에 변화를 주는 것도 가능하다.

메서드 호출로 인해 서버의 상태가 직접적으로 변화가 되지 않는다면 무조건 안전한 메서드인 것이다.

메서드의 안전함을 준수하는 것은 온전히 서버 어플리케이션의 책임으로써 Apache, Nginx, IIS등 웹 서버가 스스로 안전함을 강제하지 못한다. 특히 GET 요청을 받았을 때 자신의 상태가 바뀌지 않도록 해야한다.

 

 

3-2. 멱등성(Idempotent)

멱등법칙(冪等法則) 또는 멱등성(冪等性, 영어: idempotent)은 수학이나 전산학에서 연산의 한 성질을 나타내는 것으로, 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다.

: 동일한 요청을 한 번 보는 것과 여러 번 연속으로 보내는 것이 같은 효과를 지니고, 서버의 상태도 동일하게 남을 때, 해당 HTTP 메서드가 멱등성을 가졌다고 표현한다. GET, HEAD, PUT, DELETE 메서드는 멱등성을 가지며 POST는 멱등성을 가지지 않는다. PUT은 리소스를 대체해버리지만 POST는 요청을 여러번 던짐으로써 별개의 결과를 받을 수 있다. (예를 들자면 주문의 경우)

안전함과 마찬가지로 서버 자체가 멱등성을 보장해주지는 않으며 잘못된 웹 어플리케이션은 멱등성을 어길 수도 있다.

>> 참고로 GET 요청을 보내는 중간에 PUT,PATCH 요청이 들어와 값이 바뀌어 조회되는 값이 바뀌는 것은 멱등성 위반이 아니다. 도중에 리소스가 변경되는 상황은 가정하지 않는다.

>> 데이터 불일치, 불필요한 API 호출, 코드 처리 시간, 스로틀 등을 줄일 수 있다.

 

 

3-3. 캐시 가능(Cacheable)

: 웹사이트와 애플리케이션의 성능은 이전에 이미 가져온 리소스를 재사용함으로써 현저하게 향상될 수 있다.

이런 캐시가 가능한 메서드를 Cacheable한 메서드라고 부른다. 가능한 메서드는 GET, HEAD, POST, PATCH가 있으니 실질적으로 사용하는 메서드는 GET, HEAD정도이다.