모든 것을 HTTP에 담아서 전송한다. 서버간에 데이터 주고 받을때도 사용.
HTTP 1.1 가장 많이 사용, 가장 중요한 버전
HTTTP 2, 3 은 성능 개선에 초점이 맞춰져있다.
특징
클라이언트는 HTTP메세지를 담아서 서버로 자원을 Request(요청) 하고 대기한다.
서버는 HTTP메세지를 받아서 처리한 후 클라이언트로 Response 한다.
Stateful은 서버가 상태를 유지하는 것이다.
항상 같은 서버가 유지되어야 한다. 서버가 바뀌면 안된다?
Stateless는 서버가 상태를 유지하지 않는다.
응답 서버를 쉽게 바꿀 수 있다. → 무한한 서버 증설 가능
한계
모든 것을 무상태로 설계할 수 있는 경우도 있고 없는 경우도 있다.
로그인 같은경우 상태유지가 필요하지만 쿠키와 세션을 이용해여 상태유지를 시킨다.
상태 유지는 최소한만 사용한다!
HTTP는 기본이 연결을 유지하지 않는 모델이다.
단점
TCP/IP 연결을 새로 맺어야함(3 way handshake 시간 추가) → 지금은 HTTP 지속 연결(Persistent Connections)로 문제 해결
HTTP 헤더
용도 - HTTP 전송에 필요한 모든 부가정보 ex) 메세지 바디 내용, 크기, 인증, 압축, 캐시 정보, .. 등
메세지 바디 빼고 필요한 메타 데이터 전부 다 들어있음
필요시 임의의 헤더 추가 기능
바디
용도 - 실제 전송할 데이터
HTML, 문서, 이미지, 영상, JSON 등등
API 설계에서 가장 중요한 것은 리소스를 식별하는 것
리스소가 변경되지않으면 안전하다. → GET
동일한 클라이언트가 같은 요청을 여러번해도 결과가 같으면 ‘멱등하다’ 라고 표현한다. → f(f(x)) = f(x)
POST는 멱등하지 않다. ex) 결제 2번..
GET, HEAD 만 응답 결과 리소스를(이미지 등) 캐시할 때 사용한다.
POST와 PATCH는 캐시 가능하지만 구현하기 어렵다.