인프런 강의 모든 개발자를 위한 HTTP 웹 기본 지식 수강내용 정리


HTTP 메서드

API 의 URI 를 설계할때는 리소스만 식별하도록 하고 리소스를 대상으로 하는 행위는 메서드로 구분한다.

메서드는 클라이언트가 서버에 요청할때 기대하는 행동을 의미한다.


HTTP 메소드 RFC 요청에 Body가 있음 응답에 Body가 있음 안전 멱등(Idempotent) 캐시 가능
GET RFC 7231 아니요
HEAD RFC 7231 아니요 아니요
POST RFC 7231 아니요 아니요
PUT RFC 7231 아니요 아니요
DELETE RFC 7231 아니요 아니요 아니요
CONNECT RFC 7231 아니요 아니요 아니요
OPTIONS RFC 7231 선택 사항 아니요
TRACE RFC 7231 아니요 아니요
PATCH RFC 5789 아니요 아니요


  • 안전
    호출 시 대상 리소스를 변경하지 않는다.

  • 멱등
    같은 리소스를 여러번 호출해도 결과가 같다.
    POST 는 두번 호출 시 새로운 리소스를 여러번 생성하므로 멱등하지 않다.
    서버의 Timeout 등으로 정상적인 응답을 받지 못했을 때 클라이언트가 같은 요청을 다시 해도되는가의 근거가 되어 자동 복구를 할 수 있도록 한다.
    외부 요인으로 중간에 리소스가 변경되는 것은 고려하지 않는다.

  • 캐시 가능
    응답 결과를 캐시해서 사용해도 되는지의 여부를 의미한다.
    GET, HEAD, POST, PATCH 가 캐시가 가능하지만 실제로 GET, HEAD 만 캐시로 사용한다.


GET

리소스를 조회한다.

서버에 전달하고자 하는 데이터는 query를 통해서 전달한다.

BODY 로 데이터를 전달할 수 있지만 지원하는 서버가 많지 않아 권장하지 않는다.


POST

요청 데이터를 처리한다.

클라이언트가 BODY 로 처리할 데이터를 서버에 전달하고, 서버는 데이터를 받아서 해당 데이터를 처리 하는 모든 기능을 수행한다.

주로 신규 데이터로 등록하거나 내부적인 프로세스 처리에 사용한다.

신규 데이터 생성 시 새로운 리소스를 생성하고 결과를 응답메세지로 클라이언트에게 반환한다.

리소스 URI 에 POST 요청이 오면 어떻게 처리할지 리소스마다 별도로 지정한다.


PUT

기존에 해당 리소스가 있으면 완전히 대체하고 없으면 신규 생성한다.

클라이언트가 리소스의 위치를 알고 URI 를 지정해 서버에 전달한다. (POST 와의 차이점)

기존의 데이터는 삭제되고 새로운 데이터로만 저장된다.


PATCH

리소스의 일부를 변경한다.

기존 데이터를 삭제하지 않고 지정한 데이터 부분만 덮어쓴다.

PATCH 가 지원이 되지 않는 서버의 경우 POST 를 사용한다.


DELETE

해당 리소스를 삭제한다.


기타

  • HEAD
    GET 과 동일하지만 BODY 를 제외하고 상태와 헤더만 반환한다.

  • OPTIONS
    대상 리소스에 대한 통신 가능 옵션(메서드)을 설명한다.
    주로 CORS 에서 사용한다.

  • CONNECT
    대상 자원으로 식별되는 서버에 대한 터널을 설정한다.

  • TRACE
    대상 리소스에 대한 경로를 따라 메세지 루프백 테스트를 수행한다.