HTTP message에는 두 가지 종류가 있다.
request와 response가 있다.
HTTP request message는 아스키 코드로 보낸다. 실제 예시를 보면 다음과 같다.

그리고 일반적인 request message의 format을 보면 다음과 같다.

그리고 format에서 header file 맨 앞에 오는 'Method' 부분은 이 메시지가 어떤 요청을 뜻하는 메시지인지 알려주는 부분이므로 중요하다. 메소드의 종류에는 다음과 같은 것들이 존재한다.

status line을 보면 status code와 text가 있지 않은가?
이는 요청에 대한 응답이 어떠한 것을 나타내는지를 알려준다.
HTTP는 이전 상태 정보를 저장하지 않는 stateless 특징을 지니고 있다.
클라이언트 또는 서버의 상태를 부분적으로 유지할 수 있도록 하는 것이 Cookie이다.
Cookie는 작은 데이터 조각으로 사용자의 클라이언트에 저장된다.

다음과 같은 작동 방식을 따른다
HTTP가 state를 저장하고 있다기 보다, 쿠키가 state를 저장하는 것이고 HTTP는 쿠키를 전달만 하는 것이다.
Proxy Server라는 개념도 있다. 이것을 Web Cache라고도 부른다.
간단하게 말하면 서버를 거치지 않고 Proxy Server에서 요청하는 것을 찾아 클라이언트로 응답하기 때문이다.
이는 Proxy Server의 존재 이유와 같다.
클라이언트가 서버에게 특정 객체를 요청하면, 서버는 클라이언트에게 응답을 돌려줌과 동시에 Proxy server에도 객체를 저장한다.
만약 다음 요청에 동일한 객체를 클라이언트가 요청하면 서버를 굳이 거치지 않고 proxy server에서 바로 응답을 줄 수 있다.
Web cahce는 origin 서버의 파일의 객체가 업데이트 됐을 수도 있다. 실시간으로 보여주는 객체들은 cache에서 가져오는 것은 의미가 없다. 따라서 해당 리소스가 변경된 경우에만 다시 보내달라고 요청할 수 있다.
HTTP response는 마지막 수정 시간 정보를 가지고 있다.
클라이언트가 서버에게 '이 수정 시간 이후에 수정된 내용이 있는가?'라고 물어보면 서버는 아래 두 가지 응답을 할 수 있다.
객체가 변했는지 확인하려면 GET Method의 옵션에 if문을 달아서 보낸다.
만약 날짜 기준으로 바뀌지 않았으면 web cache에서, 바꼈으면 origin 서버에서 받는다.