인터넷은 수천 가지 데이터 타입을 다루기 때문에, HTTP는 웹에서 전송되는 모든 객체 각각에 MIME 타입이라는 데이터 포맷 라벨을 붙인다.
/으로 구분된 주 타입, 부 타입으로 이루어져 있다.
HTML: text/html
JPEG: image/jpeg
JSON: application/json
클라이언트 요청 메시지: GET /leeseonseonje
Host: github.com
서버 응답 메시지: HTTP/1.1 200 OK
Content-type: text/html
Content-length: 250
애플리케이션은 보통 하나의 작업을 수행하기 위해 여러 HTTP 트랜잭션을 수행한다.
html을 가져오고, image등을 가져오기 위해 추가로 HTTP 트랜잭션들을 수행한다.
이 리소스 들은 다른 서버에 위치할 수도 있다.
시작줄: 메시지의 첫 줄, 요청은 무엇을 요청하는지(메소드, 리소스, HTTP버전), 응답은 무슨일이 일어났는지(상태코드)를 나타낸다.
헤더: 키 : 값 형태다. 헤더의 마지막 줄은 빈 줄로 끝난다.
바디: 어떤 종류의 데이터든 들어갈 수 있다.
HTTP는 애플리케이션 계층 프로토콜이다. 네트워크 통신의 핵심적인 세부사항에 대해서 신경 쓰지 않는다. 대신 이 일을 TCP/IP가 수행한다.
HTTP 프로토콜은 메시지 데이터 전송을 위해 TCP를 사용한다.
IP와 포트번호를 이용해 통신한다.
웹브라우저가 HTTP를 이용해서 통신하는 순서
1. 웹 브라우저는 서버의 URL에서 호스트 명 추출
2. 서버의 호스트 명을 IP로 변환
3. URL에서 포트번호를 추출
4. 웹 서버와 TCP 커넥션을 맺음
5. HTTP 요청 메시지 전송
6. HTTP 응답 메시지 수신
7. 커넥션 종료, 결과를 브라우저에 보여줌