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
        • 등이 있다.

    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 완벽 가이드 책