HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜이다. 클라이언트-서버 프로토콜로 개별적인 메세지 교환에 의해 통신한다. 클라이언트인 브라우저에서 전송되는 메세지를 요청(request). 서버에서 브라우저로 전송되는 메세지를 응답(response)라고 한다.
HTTP 기반 시스템의 구성요소
HTTP는 클라이언트-서버 프로토콜이다. 클라이언트와 서버가 서로 요청-응답을 주고 받을 때 게이트웨이, 프록시 등 여러 개체가 존재할 수 있다.
클라이언트: 사용자 에이전트
브라우저와 같이 사용자를 대신하여 동작하는 모든 도구이다. 브라우저는 항상 요청을 보내는 개체이다. 때문에 서버가 될 수 없다.
웹 페이지를 표시하기 위해 브라우저는 HTTP 응답 내에서 지시사항인 헤더를 분석해 사용자에게 응답 결과를 표시해준다.
웹 서버
클라이언트의 요청을 해석하고 그에 맞는 응답을 전해줄 서버이다.
프록시
웹 브라우저와 서버 사이에는 수많은 컴퓨터와 머신이 HTTP를 중개한다. 일반적으로 전송, 네트워크, 물리 계층에서 동작하며 HTTP 계층에서는 잘 눈에 띄지 않는다. 이를 일반적으로 프록시라고 부른다. 프록시는 보통 다음과 같은 기능을 한다.
- 캐싱
- 필터링
- 로드 벨런싱
- 인증
- 로깅
특징
간단함
HTTP는 일반적으로 사람이 읽을 수 있으며 간단하게 고안되었다. 때문에 테스트하기 쉽고 초심자의 진입장벽이 낮다.
확장 가능성
HTTP/1.0에서 소개된 HTTP 헤더는 클라이언트와 서버의 합의만 있다면 간단하게 추가할 수 있으므로 확장과 실험이 쉽게 고안되었다.
Stateless
HTTP의 가장 큰 특징 중 하나로 요청과 다른 요청 사이에 상태 유지가 불가능한 stateless가 특징이다. 때문에 HTTP 쿠키와 세션을 통해 HTTP의 stateless를 해결할 수 있다.
HTTP와 연결
연결은 OSI 7 Layer 중 전송 계층의 몫이므로 응용 계층인 HTTP와는 큰 상관이 없다. HTTP는 연결될 수 있도록 하는 근본적인 전송 프로토콜을 요구하지는 않는다. 다만, 신뢰할 수 있거나 메세지 손실이 없는 연결을 요구할 뿐이다. 따라서, HTTP는 연결이 필수는 아니지만 연결 기반의 신뢰성 있는 전송 프로토콜인 TCP를 사용한다.