1장. HTTP 개관
- 이번 장에서 다룰 내용
- 얼마나 많은 클라이언트와 서버가 통신하는지
- 리소스(웹 콘텐츠)가 어디서 오는지
- 웹 트랜잭션이 어떻게 동작하는지
- HTTP 통신을 위해 사용하는 메시지의 형식
- HTTP 기저의 TCP 네트워크 전송
- 여러 종류의 HTTP 프로토콜
- 인터넷 곳곳에 설치된 다양한 HTTP 구성요소
1.1 HTTP: 인터넷의 멀티미디어 배달부
- HTTP는 전 세계의 웹 서버로부터 대량의 정보를 빠르고, 간편하고, 정확하게 클라이언트 브라우저로 옮겨준다.
- HTTP는 신뢰성 있는 데이터 전송 프로토콜
1.2 웹 클라이언트와 서버
- 웹 컨텐츠는 웹 서버에 존재한다.
- 웹 서버는 인터넷의 데이터를 저장하고, HTTP 클라이언트가 요청한 데이터를 제공한다.
- 클라이언트가 HTTP 요청(request)로 /index.html을 요청하면 HTTP 서버는 관련 정보 및 데이터를 응답(response)한다.
1.3 리소스
- 웹 서버는 웹 리소스를 관리하고 제공한다.
- 정적 파일: HTML, 텍스트, 이미지, 동영상 파일
- 동적 파일: 요청에 따른 콘텐츠를 생산하는 프로그램이 될수도 있다.
1.3.1 미디어 타입
- HTTP는 웹에서 전송되는 객체 각각에 MIME 타입이라는 데이터 포맷 라벨을 붙인다.
- MIME: Multipurpose Internet Mail Extensions
- MIME 타입은 /로 구분된 주 타입(primary object type)과 부 타입(specific subtype)으로 이뤄진 문자열 라벨
- HTML로 작성한 텍스트 문서: text/html
- plain ascii 텍스트 문서: text/plain
- jpeg 이미지: image/jpeg
- gif 이미지: image/gif
- 애플 퀵타임 동영상: video/quicktime
- 마이크로소프트 파워포인트: application/vnd.ms-powerpoint
- 등이 있다.
- MIME: Multipurpose Internet Mail Extensions
1.3.2 URI
- 웹 서버 리소스는 각자 이름을 갖고 있는 데 이것을 URI라 하며 클라이언트가 URI를 통해 지목할 수 있다.
- URI는 Uniform Resource Identifier에 약자로 정보 리소스를 고유하게 식별하고 위치를 지정할 수 있다.
- ex) http://www.joes-hardware.com/specials/saw-blade.gif
- HTTP 프로토콜을 사용하라 -> http://
- www.joes-hardware.com으로 이동하라(domain) -> www.joes-hardware.com
- /specials/saw-blade.gif 리소스를 가져와라 -> /specials/saw-blade.gif
- URI에는 URL과 URN 이 있다.
1.3.3 URL
- Uniform Resource Locator의 약자로 리소스 식별자의 가장 흔한 형태
- 표준 포맷
- URL의 첫 번째 부분은 scheme이라고 부르는데, 리소스 접근을 위해 사용되는 프로토콜 -> http://
- 두 번째 부분은 서버의 인터넷 주소를 제공 -> www.joes-hardware.com
- 마지막은 웹 서버의 리소스를 가리킨다 -> /specials/saw-blade.gif
1.3.4 URN
- Uniform Resource Name의 약자로 콘텐츠를 이루는 한 리소스에 대해 그 리소스의 위치에 영향 받지 않는 유일무이한 이름 역할을 한다.
- ex) urn:ietf:rfc:2141
- 아직 실험 단계이고 리소스 위치를 분석하기 위한 인프라 지원이 필요하는 등에 이유로 URN 채택이 늦춰지고 있다.
1.4 트랜잭션
- HTTP 트랜잭션은 요청 명령(클라이언트에서 서버로 보내는) 과 응답 결과(서버가 클라이언트에게 돌려주는)로 구성
- 요청 / 응답 예제
- (request) Client -> Server: GET /specials/saw-blade.gif HTTP/1.0 Host: www.joes-hardware.com
- (response) Server -> Client: HTTP 1.0 200 OK Content-Type: image/gif Content-length: 8572
1.4.1 메서드
- HTTP에는 HTTP 메서드라고 불리는 여러 가지 종류의 요청 명령이 있다.
- GET: 리소스 조회
- PUT: 클라이언트에서 서버로 보낸 특정 이름의 데이터를 리소스 저장 (update)
- DELETE: 리소스 삭제
- POST: 클라이언트 데이터를 서버 게이트웨이 애플리케이션으로 보내라 (insert)
1.4.2 상태 코드
- HTTP 응답 메시지에 상태 코드와 함께 반환
- 200: 요청에 대한 올바른 반환
- 302: 요청을 다시 보내라. 다른 곳에 가서 리소스를 가져가라
- 404: 리소스 없음
1.5 메시지
- 요청 메시지: 웹 클라이언트에서 웹 서버로 보내는 HTTP 메시지
- 응답 메시지: 웹 서버에서 웹 클라이언트로 보내는 HTTP 메시지
- 구조
- 시작줄: (요청)무엇을 해야 하는지, (응답)무슨일이 일어 났는지
- 요청 메시지: GET /test/hi-threr.txt HTTP/1.0
- 응답 메시지: HTTP/1.0 200 OK
- 헤더: key:value 형태로 이뤄지며 0개 이상의 헤더 필드가 이뤄진다.
- 요청 메시지: Accept: text/* Accept-language: en, fr
- 응답 메시지: Content-type: text/plain Content-length: 19
- 본문: (요청)웹 서버로 보내는 데이터, (응답)클라이언트로 데이터를 반환
- 시작줄: (요청)무엇을 해야 하는지, (응답)무슨일이 일어 났는지
1.6 TCP 커넥션
-
TCP 커넥션을 통해 클라이언트와 서버를 안전하게 통신할 수 있도록 한다.
1.6.1 TCP/IP
- HTTP는 application layer의 프로토콜로써 네트워크 통신의 핵심적인 세부사항은 TCP/IP 에게 맡긴다.
- TCP
- 오류없는 데이터 전송
- 순서에 맞는 전달 (데이터는 언제나 보낸 순서대로 도착)
- 조각나지 않는 데이터 스트림 (언제든 어떤 크기로든 보낼 수 있다)
- Application layer: HTTP
- Transport layer: TCP -> (Port 번호)
- Network Layer: IP -> (IP 주소)
- Data link layer: 네트워크를 위한 링크 인터페이스
- Physical layer: 물리적인 네트워크 하드웨어
1.6.2 접속, IP 주소, 포트번호
- HTTP 클라이언트와 서버가 통신을 하기 위해서는 커넥션을 맺어야 하며, 이 때 IP 주소, 포트 번호가 사용된다.
- 커넥션 순서
- 웹 브라우저는 서버의 URL에서 호스트 명을 추출한다.
- 웹 브라우저는 서버의 호스트 명을 IP로 변환한다.
- 웹 브라우저는 URL에서 포트번호가 있다면 추출한다.
- 웹 브라우저는 웹 서버와 TCP 커넥션을 맺는다.
- 웹 브라우저는 서버에 HTTP 요청을 보낸다.
- 서버는 웹 브라우제에게 HTTP 응답을 보낸다.
- 커넥션이 닫히면 웹 브라우저는 문서를 보여준다.
1.8 웹의 구성 요소
-
인터넷과 상호작용할 수 있는 웹 애플리케이션
1.8.1 프락시
- 웹 보안, 애플리케이션 통합, 성능 최적화를 위한 중요 구성요소
- proxy는 클라이언트와 서버 사이에 위치하여 클라이언트의 모든 HTTP 요청을 받아 서버에 전달
- 주로 보안에 사용되며 웹 트래픽 흐름 속에서 신뢰할 만한 중개자 역할을 한다.
- 요청과 응답 필터링
1.8.2 캐시
- 자신을 거쳐 가는 문서들 중 자주 찾는 것의 사본을 저장해 두는 특별한 종류의 HTTP 프락시 서버
1.8.3 게이트웨이
- 다른 서버들의 중개자로 동작하는 특별한 서버
- HTTP/FTP 게이트웨이는 FTP URI에 대한 HTTP 요청을 받아 FTP 프로토콜을 이용해 문서를 가져온다.
1.8.4 터널
- 두 커넥션 사이에서 raw 데이터를 열어보지 않고 그대로 전달해주는 HTTP 애플리케이션
- HTTP/SSL 터널은 HTTP 요청을 받아들여 목적지의 주소와 포트 번호로 커넥션을 맺는다. 이후 암호화된 SSL 트래픽을 HTTP 채널을 통해 목적지 서버로 전송할 수 있게 된다.
1.8.5 에이전트
- 사용자를 위해 HTTP 요청을 만들어주는 클라이언트 프로그램
- 사람의 통제 없이 스스로 웹을 돌아다니며 HTTP 트랜잭션을 일으키고 콘텐츠를 받아오는 자동화된 사용자 에이전트
** 출처: HTTP 완벽 가이드 책