김영한님의 인프런 강의 '모든 개발자를 위한 HTTP 웹 기본 지식'을 참고했습니다.
HTTP 메시지에 모든 것을 전송한다. HTML, TEXT, IMAGE, 음성, 영상, 파일, JSON, XML 등 거의 모든 형태의 데이터를 전송 가능하다. 서버 간에 데이터를 주고받을 때도 대부분 HTTP를 사용한다.
클라이언트는 서버에 요청을 보내고 응답을 대기, 서버가 요청에 대한 결과를 만들어서 응답.
HTTP는 무상태 프로토콜이다. 따라서 서버에서 상태를 보관하지 않으므로 중간에 서버가 장애나도 다른 서버들로 쉽게 대체 가능하여 수평 확장에 유리하다는 장점이 있다. 반면 상태 유지(Stateful)는 상태를 유지해야 하기 때문에 클라이언트에 항상 같은 서버가 유지되어야 하며 따라서 만약 중간에 서버가 장애나면 대체 할 수가 없다.
상태 유지는 최소한만 사용해야 한다. 상태 유지의 예로 로그인이 있다. 로그인한 사용자의 경우 로그인했다는 상태를 서버에 유지해야 한다.
연결을 유지하는 모델
연결을 유지하지 않는 모델
HTTP는 기본이 연결을 유지하지 않는 모델이다. 지금은 HTTP 지속 연결로 단점을 해결한다.
지속 연결 적용 전
지속 연결 적용 후
내부 매커니즘에 따라 일정 시간동안 지속 연결을 유지한다.
HTTP 헤더는 HTTP 전송에 필요한 모든 부가정보를 담는다. 예를 들어 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트(브라우저) 정보, 서버 애플리케이션 정보, 캐시 관리 정보 등등.