1. WWW와 HTTP
1-1. HTTP란?
- HTTP는 브라우저가 서버로부터 HTML 문서나 이미지를 요청하고 받아들일 때 사용하는 프로토콜이다.
- HTTP 서버는 그런 HTML 문서나 이미지를 제공해주는 소프트웨어이다. Apache, Nignix, IIS 등이 있다.
1-2. WWW의 구조
- 파이어 폭스 웹 브라우저로 특정 웹 페이지를 표시했다.

- 코드는 다음과 같다.

- other page는 other.html에 하이퍼링크로 연결되어 있다.
- 텍스트를 클릭하면 웹 브라우저는 index.html과 동일한 서버, 동일한 포트에 TCP 소켓을 연결하여 other.html로 통신을 시도한다.
- TCP 접속이 완료되면 HTTP 서버 프로세스와 HTTP 클라이언트 프로세스웹 브라우저 사이에 스트림이 연결된다.

- 이 스트림을 통해 브라우저가 HTTP 서버가 정보를 교환한다.

<-
표시는 클라이언트로부터 서버로 보내는 데이터를 의미하고 ->
표시는 서버로부터 클라이언트로 보내는 데이터를 의미한다. 
- other.html의 내용을 받은 후 HTML의 내용을 모두 전달된 시점에서 TCP 스트림이 끊어진다. 브라우저는 그 내용을 렌더링해서 다음과 같이 표시한다.

- 코드는 다음과 같다.

2. HTTP
2-1. HTTP의 교환
- HTTP에서 이루어지는 데이터 교환을 다시 살펴보자.

- 클라이언트가 쓰는 부분을 HTTP 요청이라고 하고 서버가 쓰는 부분을 HTTP 응답이라고 한다.
- 클라이언트는 이 URL의 데이터가 필요하다라고 요청하고 서버가 그것에 대한 응답하면서 요청->응답이 반복된다.
2-2. HTTP 요청
"GET /ja/linuxprog/test/other.html HTTP/1.1\r\n"
- 첫 번째 줄은 요청라인이라고 하고 HTTP 요청의 핵심이 담겨있다. 요청을 해석해보면 다음과 같다.
- GET: 데이터가 필요하다.
- /ja/linuxprog/test/other.html: 데이터의 경로
- HTTP 버전 1.1을 사용한다.
"Connection: close\r\n"
"Accept: * / * \r\n"
"Host: i.loveruby.net\r\n"
"\r\n"
- 그 다음 줄부터는 부가적인 정보를 기재하는 부분을 HTTP 헤더라고 한다.
항목명: 값
의 형식이다.
- 위의 내용을 해석하면 다음과 같다.
- Connection: close: 응답을 보낸 후 TCP 연결을 끊어라.
- Accept: / : 어떤 종류의 데이터라도 받겠다.
2-3. HTTP 응답
→ "HTTP/1.1 200 OK\r\n"
- 첫 번째 줄은 상태 코드로 응답의 결과를 전달한다.
→ "Date: Fri, 11 Aug 2017 11:50:28 GMT\r\n"
→ "Server: Apache/2.4.10 (Debian)\r\n"
→ "Last-Modified: Fri, 11 Aug 2017 11:48:32 GMT\r\n"
→ "ETag: \"a3-55678fde663c0\"\r\n"
→ "Accept-Ranges: bytes\r\n"
→ "Content-Length: 163\r\n"
→ "Vary: Accept-Encoding\r\n"
→ "Connection: close\r\n"
→ "Content-Type: text/html\r\n"
→ "\r\n"
:(HTML)
- 그 다음 줄부터는 엔티티 본문이라고 하고 HTTP 헤더를 통해 응답 자체에 관한 정보나 반환하려는 데이터에 관한 정보를 제공한다.
2-4. 정리
- HTTP는 요청과 응답으로 구성되어 있고 구조는 다음과 같다.

- 요청 방식에 따라 엔티티 본문이 있을 수 있다.
- GET 요청 방식은 엔티티 본문을 사용하지 않지만 다음과 같은 경우에는 엔티티 본문이 붙는다.
- HTTP 헤더만 요구하는 HEAD 요청
- 데이터 게시에 사용하는 POST dycjd
- PUT, DELETE 등