본문 바로가기

Study/HTTP

HTTP 완벽 가이드 - 1장

1장 - HTTP 개관


 

- 웹 클라이언트와 서버

 

웹 서버는 HTTP 프로토콜로 의사소통하여 HTTP 서버라고 불린다. 또한, 인터넷의 데이터를 저장하고 클라이언트가 요청한 데이터를 제공한다.

클라이언트(웹 브라우저)가 서버에게 HTTP 객체를 요청 하면 서버는 클라이언트에게 요청 받은 객체를 찾고, 데이터에 대한 정보와 함께 HTTP 응답을 한다.

 

- 리소스

 

웹 리소스 = 웹 콘텐츠를 제공하는 모든 것

웹 서버는 이러한 웹 리소스를 관리하고 제공하며 웹 리소스는 각각 정적 파일(텍스트, HTML 등), 동적 콘텐츠 리소스(동적으로 콘텐츠를 생성하는 리소스)가 존재한다.

 

  • 미디어 타입

HTTP가 웹에서 전송되는 객체에 데이터 포맷 라벨(MIME)을 붙여 어떤 타입의 데이터를 요청하는지, 또 다룰 수 있는 객체인지를 확인할 수 있게 끔 한다.

MIME = 주 타입 / 부 타입(ex. text/html, image/jpeg 등등..)

 

  • URI(Uniform Resource Identifier)

서버 리소스 이름은 URI라고 불리고, 이를 통해 정보 리소스를 고유하게 식별 가능하다.

즉, HTTP는 주어진 URI를 통해 객체를 찾아온다.

 

  1. URL(Uniform Resource Locator)

특정 서버의 한 리소스에 대한 구체적인 위치로 세 부분으로 나뉘어져 있다.

​ a. 스킴(프로토콜)

​ b. 인터넷 주소(IP or DNS)

​ c. 웹 서버 리소스

 

  1. URN(Uniform Resource Name)

리소스 위치에 독립적인 유일무이한 이름 역할을 한다. 따라서 여러 종류의 네트워크 접속 프로토콜로 접근해도 괜찮다. => 다만, 리소스 위치를 분석하기 위한 인프라 부재로 인해 채택이 늦춰지고 있다.

 

- 트랜잭션

 

HTTP 트랜잭션 = HTTP 메시지를 통한 요청 명령 + 응답 결과

메소드

HTTP 메소드는 여러 가지 종류의 요청 명령을 지원한다.

(1) GET - 지정한 리소스를 보내줘라.

(2) PUT - 지정한 리소스를 저장하라.

(3) DELETE - 지정한 리소스를 삭제하라.

(4) POST - 데이터를 서버 게이트웨이 어플리케이션으로 보내라.

(5) HEAD - 응답 시 HTTP 헤더 부분만 보내라.

 

상태 코드

HTTP 응답 메시지는 상태 코드와 함께 반환된다.

(1) 200 - OK

(2) 302 - 다시 보내라, 다른 곳에 가서 리소스를 가져가라.

(3) 404 - NOT FOUND

 

여러 객체로 구성되는 웹 페이지

웹 브라우저는 웹 페이지를 가져올 때 여러 HTTP 트랜잭션을 수행하므로 리소스의 모음이라고 할 수 있다.

(일반적으로, Page layout을 트랜잭션으로 가져온 뒤 나머지 리소스를 가져오기 위해 추가 HTTP 트랜잭션을 수행한다.)

 

- 메시지

 

웹 클라이언트 -> 웹 서버: HTTP 요청 메시지

웹 서버 -> 웹 클라이언트: HTTP 응답 메시지

 

<HTTP 메시지 구성 3가지>

(1) 시작줄

요청 메시지일 경우: (Method) (Resource) (Protocol)

ex) GET /api/get.txt HTTP/1.0

응답 메시지일 경우: (Protocol) (상태 코드)

ex) HTTP/1.0 200 OK

 

(2) 헤더

:으로 구분되는 하나의 이름과 하나의 값으로 구성되고, 0개 이상의 헤더 필드가 이어진다. 특히, 헤더는 빈 줄로 끝난다.

응답 헤더에는 Content-Length(응답 본문 길이), Content-Type(MIME 타입) 등이 포함되어 있다.

 

(3) 본문

어떤 데이터든 들어갈 수 있다.(이진 데이터, 텍스트 모두 가능)

요청 메시지일 경우: 웹 서버로 데이터를 실어 보낸다.(간단한 문서를 가져오는 데는 본문 생략)

응답 메시지일 경우: 요청한 데이터를 클라이언트에게 반환한다.

 

- TCP 커넥션

 

HTTP는 Application Layer Protocol이고, 신뢰성 있는 인터넷 전송 프로토콜인 TCP/IP를 사용하여 메시지를 전송한다.

TCP의 특징으로는 1)오류 없는 데이터 전송 2)순서 보장 3)조각나지 않는 데이터 스트림이 있다.

 

TCP/IP란?

TCP와 IP가 층을 이루는, 패킷 교환 네트워크 프로토콜의 집합으로써 어떤 종류의 컴퓨터나 네트워크든 서로 신뢰성 있는 소통을 하게 해준다.

TCP가 Connection을 맺기 위해서는 2가지 정보가 필요한데, 그것이 IP와 Port이다.

웹 서버의 IP와 Port 정보는 URL을 통해 얻을 수 있다.

 

<웹 브라우저가 HTTP를 이용해 HTML 리소스를 보이는 과정>

  1. URL에서 호스트 명을 추출하여 IP로 변환한다.
  2. URL에서 포트번호(있다면) 추출한다.
  3. TCP Connection을 맺고 HTTP요청, HTTP 응답한다.
  4. 커넥션이 닫히고 웹 브라우저는 문서를 보여준다.
  • Telnet

HTTP는 문자열 기반이므로 Telnet을 이용하여 웹 서버와 직접 대화하는 것도 간단하다.

Telnet을 이용해서 일반적인 TCP 서버에 연결할 수 있고, 컴퓨터의 포트로 TCP 커넥션을 연결해 포트로 글자를 타이핑해 넣을 수 있게 해준다.

웹 서버는 Telnet 사용자를 웹 클라이언트로 취급, 반환되는 데이터를 화면에 출력한다.

 

- 프로토콜 버전

 

HTTP/0.9 - GET 메소드만 지원, 멀티미디어 컨텐츠 지원하지 않음.

HTTP/1.0 - 처음으로 널리 쓰이기 시작한 HTTP로 HTTP 헤더, 메서드, 멀티미디어 객체 지원

HTTP/1.0+ - "keep-alive" 커넥션, 가상 호스팅 지원, 프락시 연결 지원 등

HTTP/1.1 - 현재의 HTTP 버전

 

- 웹의 구성요소

 

<웹 어플리케이션의 종류>

 

프락시(Proxy)

웹 보안, 애플리케이션 통합, 성능 최적화를 위한 중요 요소로서 웹 트래픽 속에서 신뢰할 만한 중개자 역할을 한다.

클라이언트의 모든 HTTP 요청을 받아 서버에 전달하고, 요청과 응답을 필터링한다.

 

캐시

자주 찾는 것의 사본을 저장하는 특별한 종류의 HTTP 프락시 서버

HTTP는 캐시를 효율적으로 동작하게 하고, 캐시된 콘텐츠를 최신으로 유지하며 프라이버시도 보호하기 위한 많은 기능을 정의한다.

 

게이트웨이

HTTP 트래픽을 다른 프로토콜로 변환하기 위해 사용한다.

게이트 웨이는 항상 리소스를 갖고 있는 서버인 것처럼 요청을 다루므로 클라이언트는 웹 서버가 아닌 게이트웨이와 통신하고 있음을 알지 못한다.

ex) HTTP/FTP 게이트웨이는 FTP URI에 대한 HTTP 요청을 클라이언트로 부터 받아 FTP를 이용해 서버로 부터 문서를 받고 HTTP 메시지에 담아서 클라이언트에게 보낸다.

 

터널

두 Connection 사이에서 raw data를 그대로 전달해주는 HTTP 어플리케이션이다.

주로 비 HTTP 데이터를 HTTP 연결을 통해 그대로 전송해주기 위해 사용한다.

대표적인 예) HTTP/SSL터널

 

에이전트

사용자를 위해 HTTP 요청을 만들어주는 클라이언트 프로그램으로, 웹 브라우저가 하나의 대표적인 예시이다.

자동화된 에이전트는 "스파이더" 혹은 "웹로봇" 등으로 불리며 특히 스파이더는 웹을 돌아다니며 유용한 웹 콘텐츠 보관소(데이터베이스, 카탈로그 등)를 만든다.