
이 글은 'HTTP 완벽 가이드' 책을 읽고 정리한 내용입니다.
HTTP(Hypertext Transfer Protocol)로 현대 인터넷의 공용어이다.
- protocol이란 원활한 통신을 위한 약속을 의미

HTTP가 어떻게 웹 트래픽을 전송하는가?
웹 리소스는 웹 서버(HTTP 서버)가 관리, 제공하는 웹 콘텐츠의 원천이다.
웹 서버의 모든 HTTP 객체 데이터는 MIME 타입을 붙인다.
위에서 설명했듯이 HTTP는 다양한 형식의 파일 등을 인터넷 상에서 운반한다. MIME 타입이란 이런 다양한 형식의 파일의 형태를 명시해주기 위한 하나의 인터페이스이다.

(주 타입)/(부 타입)
정보 리소스를 고유하게 식별하기 위한 식별자,주소
URI는 크게 두가지로 나뉘게 된다.
1. 스킴(scheme) : "http://"
2. 웹 서버 주소 : "www.mywebpage.com"
3. 리소스의 위치 : "/index.html"
URN은 콘텐츠를 이루는 한 리소스에 대해, 그 리소스의 위치에 영향 받지 않는 유일무이한 이름 역할을 한다.
ex) urn:ietf:rfc:2141
HTTP 트랜잭션은 두가지로 구성되어 있다.
- 요청 명령 : 클라이언트에서 서버로 보내는
- 응답 명령 : 서버가 클라이언트에게 돌려주는
클라이언트가 서버에게 요청 명령을 보낼 때 사용하는 HTTP 메서드로 역할에 따라 구분된다.
| HTTP 메서드 | 설명 |
|---|---|
| GET | 서버에서 클라이언트로 지정한 리소스를 보내라 |
| PUT | 클라이언트에서 서버로 보낸 데이터를 지정한 이름의 리소스로 저장하라 |
| DELETE | 지정한 리소스를 서버에서 삭제하라 |
| POST | 클라이언트 데이터를 서버 게이트웨이 애플리케이션으로 보내라 |
| HEAD | 지정한 리소스에 대한 응답에서, HTTP 헤더 부분만 보내라 |
서버가 클라이언트에게 응답을 보낼 때 요청에 대한 성공/실패 여부 및 추가 조치에 대해서 명시해주는 코드
| HTTP 상태 코드 | 설명 |
|---|---|
| 200 | 좋다. 문서가 바르게 반환되었다 |
| 302 | 다시 보내라. 다른 곳에 가서 리소스를 가져가라 |
| 404 | 없음. 리소스를 찾을 수 없다 |
(HTTP 메서드 및 응답 상태 코드에 대한 자세한 내용은 3장에서 다룸)
애플리케이션은 보통 하나의 작업을 수행하기 위해 여러 HTTP 트랜잭션을 수행한다.
웹브라우저는 시각적으로 풍부한 웹페이지를 가져올 때 대량의 HTTP 트랜잭션을 수행하는데 다음과 같다.
웹페이지는 보통 여러 리소스의 모음으로 각 리소스는 다른 서버에 위치할 수도 있다.

HTTP 트랜잭션에서 클라이언트와 서버가 주고 받는 메시지의 간단한 예시로 크게 세 부분으로 이루어져 있다.
1. 시작줄 :
2. 헤더 :
3.본문 :
전송 계층에서 사용하는 프로토콜로 다음과 같은 성능을 보장한다.
- 신뢰성 있는 데이터 전송 보장
- 오류 및 미응답으로 발생 시, 재전송을 통해 보장한다.
- 데이터의 순서를 보장
- 조각나지 않는 데이터 스트림
전송 계층보다 상위 계층인 애플리케이션 계층의 HTTP 프로토콜이 TCP 프로토콜을 사용해서 데이터를 전송하고 이 과정은 TCP 커넥션을 맺고 이루어진다.
(TCP에 대한 자세한 내용은 4장에서 다룬다.)
인터넷과 상호작용할 수 있는 다양한 웹 애플리케이션이 있다.
1. 프락시 : 주로 보안을 위해 사용되는 서버로, 모든 웹 트래픽 흐름 속에서 신뢰할만한 중개자 역할을 한다.
2. 캐시 : 자신을 거쳐가는 문서들 중 자주 찾는 것의 사본을 저장해 두는 역할을 한다.
3. 게이트웨이 : 다른 서버들의 중개자로 동작하는 서버로, 주로 HTTP 트래픽을 다른 프로토콜로 변환하기 위해 사용한다.
4. 터널 : 두 커넥션 사이에 raw 데이터를 열어보지 않고 그대로 전달해주는 HTTP 애플리케이션이다.
5. 에이전트 : 사용자 에이전트는 사용자를 위해 HTTP 요청을 만들어주는 클라이언트 프로그램이다.
(각 애플리케이션에 대한 자세한 내용은 뒤에서 다룬다.)