record logo record

목차

HTTP 개요

HTTP(HyperText Transfer Protocol)는 HTML과 같은 하이퍼미디어 문서를 전송하기 위한 Application Layer의 프로토콜입니다.

HTTP는 클라이언트의 요청을 받을때 까지 대기하는 Client to Server 모델을 따릅니다.

Client to Server는 수신자 측에 의해 요청이 초기화되는 구조를 말합니다.

그리고, HTTP는 서버가 두 요청간에 어떠한 데이터(상태)도 유지하지 않는 무상태 프로토콜입니다.

HTTP는 안정적인 Transport layer로 TCP/IP 기반 혹은 암호화된 TCP 연결인 TLS를 통해 연결합니다.

HTTP 역사

HTTP/0.9

HTTP 초기 버전에는 버전 번호가 없었습니다. HTTP/0.9는 이후에 차후 버전과 구별하기 위해 0.9로 불리게 됐습니다. HTTP/0.9의 요청은 단일 라인으로 구성되며 리소스에 대한 (프로토콜, 서버 그리고 포트는 서버가 연결되고 나면 불필요로 하므로 URL은 아닌) 경로로 가능한 메서드는 GET이 유일했습니다.

GET /mypage.html
<HTML>
A very simple HTML page
</HTML>

HTTP/1.0

HTTP/1.0은 브라우저와 서버 모두 좀 더 융통성을 가지도록 빠르게 확장되었습니다.

html 요청 예시

GET /mypage.html HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)

200 OK
Date: Tue, 15 Nov 1994 08:12:31 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/html

<HTML>
A page with an image
  <IMG SRC="/myimage.gif">
</HTML>

이미지 요청 예시

GET /myimage.gif HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)

200 OK
Date: Tue, 15 Nov 1994 08:12:32 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/gif

HTTP 기반 시스템의 구성요소

HTTP는 Client to Server 프로토콜입니다. 보통 브라우저(Client)에 의해 전송되는 메시지를 요청(Requests)라고 부르고 이에 대한 서버에서 응답으로 전송하는 메시지를 응답(Responses)라고 합니다.

이러한 요청(Requests)과 응답(Responses) 사이에는 여러 개체들이 있습니다.

클라이언트

클라이언트는 보통 브라우저가 해당 역할을 수행합니다. 클라이언트는 항상 요청을 보내는 개체입니다.

웹 서버

웹 서버는 클라이언트의 요청에 대한 응답을 보내는 개체입니다. 즉, 요청에 대한 문서를 제공하는 역할을 수행합니다.

서버는 논리적으로 단일 기계에 해당합니다. 로드 밸런싱 혹은 캐시, DB서버 등의 정보를 얻어 부분적으로 혹은 완전하게 문서를 생성하는 서버들의 집합일 수도 있기 때문입니다. 다시말해 서버 각각 개별의 역할(DB서버, 메모리 DB서버 등)을 수행하는 집합일 수도 있다는 의미입니다.

물론 서버가 반드시 단일 기계일 필요는 없습니다. 여러 개의 서버를 동일한 머신 위에서 호스팅 할 수는 있습니다.

HTTP/1.1과 Host 헤더를 이용하여 동일한 IP 주소를 공유할 수 있습니다.

프록시

웹 브라우저와 서버 사이에서는 수많은 개체들이 HTTP 메시지를 이어 받고 전달합니다. 여러 계층으로 이루어진 웹 스택 구조에서 이러한 개체들은 대부분 전송(Transport), 네트워크(Network) 혹은 물리(Physical) 계층 에서 동작합니다.

이러한 개체들 중에서도 Application Layer에서 동작하는 것들을 일반적으로 프록시라고 부릅니다. 프록시는 다양한 기능들을 수행할 수 있습니다.

요약

References