[Web] HTTP Protocol

Harry park·2021년 12월 23일
0

Web

목록 보기
1/7
post-thumbnail
post-custom-banner

HTTP란?

HTTP( Hyper Text Transfer Protocol)로 RFC 2616에서 규정된 Web에서 데이터를 주고 받는 프로토콜을 말한다.

  • 이름에는 하이퍼 텍스트 전송용으로 정의되어 있지만, 실제로는 HTML, JSON, XML, Image, Voice, Video, Javascript, PDF등 다양한 컴퓨터에서 다룰 수 있는 모든 것을 전송할 수 있다.

  • TCP를 기반으로 한 REST의 특징을 모두 구현하고 있는 Web기반의 프로토콜이다.

  • HTTP는 반드시 Request가 있고, Response가 있다.

Http Method 종류

Http Method의 속성

안전성(Safe)

Http Method의 안전성이란 보안취약성을 말하는 것이 아니라 호출해도 리소스가 변경되지 않는 성질을 말한다.

예를 들어, GET Method는 단순히 Retrieve만을 수행하기 때문에 리소스를 변경하지 않기 때문에 안전성을 가진 Http Method라고 할 수 있다.
반면에, POST, PUT, DELETE, PATCH Method는 호출한 데이터의 변경/갱신이 발생하므로 안전하지 않은 Http Method라고 할 수 있다.

멱등성(Idempotent)

사전적으로 멱등이란, 연산을 여러 번 적용하더라도 결괏값이 달라지지 않는 일을 의미한다.

위의 정의에 따라 Http Method의 멱등성이란 성질은 요청(Request)를 1번 이상 호출하더라도, 그 결과가 항상 동일함을 의미한다.
동일한 요청을 여러번 보내더라도, 서버의 상태도 동일하게 남을 때, 멱등성을 가진다고 말한다.

RFC 7231스펙 문서 에 보면 멱등성이란 “여러 번 동일한 요청을 보냈을 때, 서버에 미치는 의도된 영향이 동일한 경우” 라고 정의되어 있다

멱등성이 성립 예외

📖 GET Method
GET은 데이터를 한 번을 조회하든, 여러 번을 조회하든 같은 결과가 조회되므로 안전과 멱등을 동시에 만족하는 메서드이다.

설계상의 예외
1. GET /post/1 요청
2. 서버에서 id값이 1인 게시글을 조회
3. 해당 게시글의 조회수 데이터를 1 증가
4. 해당 게시글 데이터를 응답

⚠️ 멱등하다고 해서 결과가 항상 같지 않음
1. A 가 GET /members/100 통해 리소스를 조회
2. B 가 PUT /members/100 통해 리소스를 변경
3. A 가 GET /members/100 통해 리소스를 다시 조회

📖 DELETE Method
DELETE Method는 단순 삭제이다. 삭제 요청을 여러번 하더라도 서버에서는 이미 해당 리소스가 삭제되었으므로 서버의 상태는 변하지 않는다. (멱등성이 성립)

설계상의 예외

Send Request
DELETE /posts/last

DELETE를 여러번 요청하면 매번 마지막 게시글을 삭제하므로 매번 서버의 상태가 변하게 되므로 멱등성이 성립하지 않게 된다.

📖 POST Method
POST는 서버로 자원을 전송하여 새로운 자원을 생성한다. POST Method 요청을 여러번 보내는 경우 매번 새로운 자원이 생성되며, 이는 서버의 상태가 변경되는 것을 의미하는 것이므로 멱등을 만족하지 않는다.

📖 PUT Method
PUT은 대상 리소스를 갱신하거나, 리소스가 없으면 신규로 추가한다.
즉, 대상 리소스가 없으면 POST와 같은 동작을 하고, 대상 리소스가 있으면 자원의 갱신만 한다.

⚠️ 멱등하다고 해서 결과가 항상 같지 않음

상태코드설명
200 OKGET, PUT
201 CreatedPOST, PUT
205 No ContentDELETE, PUT

📖 PATCH
PUT이 리소스 전체 교체 라면, PATCH는 리소스의 부분적인 수정을 할 때 사용된다.
PATCH는 멱등성을 보장한다고 명시되어 있지는 않다. 다만, 설계에 따라 멱등성이 성립되기도 하고 성립되지 않기도 한다.

📌 PUTPATCH 메소드의 중요한 차이점은 전체 교체, 일부 교체 행위의 차이가 아니라, PUT 메소드는 반드시 멱등성을 보장하지만 PATCH 메소드는 멱등성을 보장하지 않을 수도 있다는 것이다.

캐시가능(Casheable)

캐시 가능성응답 결과 리소스를 캐싱해서 사용할 수 있는가의 여부를 말한다.

A cacheable response is an HTTP response that can be cached, that is stored to be retrieved and used later, saving a new request to the server. Not all HTTP responses can be cached, these are the following constraints for an HTTP response to be cached:

공식 Spec상 지원하는 Method는 GET, HEAD이다. POST, PATCH도 캐싱하여 사용할 수 있으나 브라우저 문제를 비롯하여 유지의 어려움 때문에 보장하진 않는다.

주요 응답 코드

profile
Jr. Backend Engineer
post-custom-banner

0개의 댓글