HTTP 는 HTML 문서와 같은 리소스들을 가져올수 있도록 해주는 프로토콜이다.
HTTP 는 웹에서 이루어지는 모든 데이터 교환의 기초이다.
클라이언트 (대부분 사용자의 브라우저) 에서 요청(Request)을 보내고, 서버는 요청을 처리한후 응답을 제공한다(Response)
각각의 요청들이 서버로 보내질때 , 요청과 응답사이에는 여러 개체들이 있는데
게이트웨이 또는 프록시 등이 있다.

HTTP는 상태를 저장하지 않는다(Noncontext)
무상태(Stateless) 이므로 응답서버를 바꾸는데 제약이 없다-> 서버를 쉽게 바꿀수 있다. -> 서버를 무한히 확장가능하다. 이는 e-커머스 쇼핑 바구니처럼, 일관된 방식으로 사용자에게 페이지를 띄우는 경우 유용하다.
하지만 상태유지 (Stateful) 로 설계 해야하는 경우가 있다. 로그인을 한경우 추가로 요청을 허용하는 경우가 있다. 그래서 HTTP쿠키 와 서버세션을 사용해서 상태유지를 허용할수 있다.
HTTP 는 기본적으로 비 연결성을 지향한다.
연결(Connection)은 HTTP가 관여하지 않는다.
HTTP/1.0 는 요청후 연결을 끊는 즉시 연결종료 방식을 사용했다.
한 클라이언트가 요청을 여러번 반복하면, 하나의 요청마다 한번의 연결(3 way -handshake) 가 필요하므로 비 효율적이다. 그래서
HTTP/1.1 부터 지속 연결(Persistent Connections) 을 지원한다
HTTP/2 ,HTTP/3 모두 연결성 최적화.
HTTP는 전송할 데이터 형식과 동작을 제한하지 않고, 확장 가능하며 다양한 요청/응답 처리 할수 있다.
text/html → HTML 문서
application/json → JSON 데이터
image/png → PNG 이미지
audio/mpeg → MP3 오디오
요청/응답처리 -> HTTP 메서드