HTTP는 클라이언트로부터 리퀘스트가 송신되며, 그 결과가 서버로부터 리스폰스로 돌아오는 구조다. 리퀘스트가 없으면 리스폰스도 없다.
Request의 구조 : 메소드, URI, 프로토콜 버전, 리퀘스트 헤더 필드, 엔티티
Response의 구조
2. HTTP는 Stateless
HTTP는 과거의 리퀘스트/리스폰스에 대해 전혀 기억하지 않는다.
HTTP/1.1은 Stateless다. 하지만 상태를 유지하고 싶은 요구에 부응하기 위해 Cookie가 도입되었다.
3. Request URI
Request URI를 지정하는 방법은 여러 종류가 있다.
모든 URI를 포함하는 방법 / Host 헤더 필드에 네트워크 로케이션을 포함하는 방법.
4. HTTP Method
1) GET : 리소스 획득
2) POST : 엔티티 전송
3) PUT : 파일 전송
4) HEAD : 메시지 헤더 취득
5) DELETE : 파일 삭제
6) OPTIONS : 제공하고 있는 메소드의 문의
7) TRACE : 경로 조사
8) CONNECT : 프록시에 터널링 요구
5. Persistent Connection과 HTTP Pipelining
리퀘스트를 보낼 때마다 TCP Connection 연결/종료하면 통신량이 늘어나게 된다.
Persistent Connection은 어느 한 쪽이 명시적으로 연결을 종료하지 않는 이상 TCP 연결을 계속 유지한다. 이렇게 하면 서버 오버헤드가 줄어든다.
HTTP Pipelining은 Persistent Connection에 의해 가능해진다. 리퀘스트 송신 후 리스폰스 수신할 때까지 기다리는 게 아니라 다른 리퀘스트도 보내버린다.
6. Cookie
쿠키는 서버에서 리스폰스로 보내진 Set-Cookie라는 헤더 필드에 의해 쿠키를 클라이언트에 보존하게 된다. 다음 번에 클라이언트가 같은 서버로 리퀘스트를 보낼 때, 자동으로 쿠키 값을 넣어서 송신한다.