이 포스트는 “HTTP 완벽가이드”의 “1장, HTTP 개관”을 정리한 내용입니다.


HTTP

  • HTTP는 신뢰성 있는 데이터 전송 프로토콜
  • 개발자는 HTTP 통신 중 파일이 파괴, 중복, 왜곡되는 것을 걱정할 필요 없음
  • 개발자는 인터넷의 결함이나 약점에 대한 걱정 없이 어플리케이션의 고유 기능을 구현하는데 집중

웹 클라이언트와 서버

  • 클라이언트 / 서버
  • 웹 서버로 HTTP 요청이 들어오면 서버는 요청에 해당하는 객체를 찾아 타입, 길이 정보등을 포함하여 HTTP 응답

리소스

  • 웹서버는 리소스를 관리하고 제공
  • HTML, TXT, WORD, PDF, JPEG, AVI …
  • 리소스는 꼭 정적 파일일 필요 없음
  • 어떤 종류의 콘텐츠 소스도 리소스가 될 수 있음
  • 인터넷 검색엔진 역시 리소스

미디어 타입

  • HTTP는 웹에서 전송되는 객체 각각에 MIME 타입이라는 데이터 포맷 라벨이 붙음
  • MIME(Multipurpose Internet Mail Extensions, 다목적 인터넷 메일 확장)
  • MIME는 메일 시스템 사이에서 메시지 전송 중의 문제를 해결하기 위해 설계
  • 메일에서 잘 동작하여 HTTP에서도 채택
  • 사선(/)으로 구분된 주 타입, 부타입으로 이루어짐 text/html, text/plain, image/jpeg, image/gif …

URI

  • 자원 식별자(uniform resource identifier), URI

URL

  • uniform resource locator
  • 리소스에 대한 구체적인 위치를 서술
  • 스킴, 서버의 인터넷 주소, 웹서버의 리소스로 이루어짐

URN

  • uniform resource name
  • 콘텐츠를 이루는 한 리소스에 대해, 리소스의 위치에 영향을 받지 않는 유일무이한 이름 역할
  • 리소스의 위치를 변경하여도 문제없이 동작
  • 실험중인 상태 아직 널리 채택되지 않음

트랜잭션

  • HTTP 트랜잭션은 요청 명령과 응답 명령으로 구성

메서드

  • HTTP 메서드라 불리는 여러 종류의 요청 명령을 지원
  • HTTP요청은 한 개의 메서드를 가짐
  • GET, PUT, DELETE, POST, HEAD

상태코드

  • 모든 HTTP 응답 메시지는 상태 코드와 함께 반환
  • 200, 302, 404
  • HTTP는 각 숫자 상태 코드에 텍스트로된 구문도 함께 전송
  • 실제 응답 처리에는 숫자로 된 코드 사용

웹페이지의 구성

  • 하나의 작업을 수행하기 위해 여러 HTTP 트랜잭션을 수행
  • 페이지 레이아웃을 서술하는 HTML ‘뼈대’를 가져온 뒤,
  • 첨부된 리소스들을 가져오기 위해 HTTP 트랜잭션들을 수행

메시지

  • HTTP 메시지는 단순한 줄 단위의 문자열
  • 일반 텍스트, 사람이 읽고 쓰기 쉬움
  • 시작줄:
    ** 요청이라면 무엇을 해야하는지, 응답이라면 무슨 일이 일어났는지 표기
  • 헤더:
    ** 시작줄 다음에는 0개 이상의 헤더 필드가 이어짐
    ** 각 헤더 필드는 콜론으로 구분된 키/벨류 페어
    ** 헤더는 빈줄로 끝남
  • 본문:
    ** 빈 줄 다음에는 어떤 종류의 데이터든 들어갈 수 있음

TCP 커넥션

  • HTTP는 TCP/IP 위에 존재
  • TCP는 오류 없는 데이터 전송, 순서, 데이터의 스트림을 보장
  • HTTP URL에 포트번호가 빠진 경우는 기본 값(80)으로 가정

웹의 구성 요소

프락시

  • 웹 보안, 어플리케이션 통합, 성능 최적화를 위한 구성요소
  • 클라이언트와 서버 사이에 위치
  • 클라이언트의 모든 HTTP 요청을 받아 서버에 전달
  • 사용자를 위한 프락시로 사용자를 대신해 서버에 접근
  • 주로 보안을 위해 사용, 모든 웹 트래픽 흐름 속에서 신뢰할 만한 중개자 역할
  • 요청과 응답을 필터링할 수 있음

캐시

  • 자주 찾는 것의 사본을 저장해 두는, 특별한 종류의 HTTP 프락시 서버
  • 훨씬 더 빨리 문서를 다운로드 가능하게 해줌
  • HTTP는 캐시를 효율적으로 동작하게 하고, 캐시된 콘텐츠를 최신버전으로 유지하며 동시에 프라이버시도 보호하게 하는 많은 기능을 정의

게이트웨이

  • 다른 서버들의 중개자로 동작하는 특별한 서버
  • HTTP 트래픽을 다른 프로토콜로 변한하기 위해 사용
  • 게이트웨이는 언제나 스스로가 리소스를 가지고 있는 진짜 서버인 것처럼 요청을 다룸

터널

  • 터널은 raw 데이터를 열어보지 않고 그대로 전달
  • HTTP 터널은 주로 비 HTTP 데이터를 하나 이상의 HTTP 연결을 통해 그대로 전송해주기 위해 사용

에이전트

  • 사용자 에이전트는 사용자를 위해 HTTP 요청을 만들어주는 클라이언트 프로그램
  • 웹브라우저, 스파이더 …
  • 스파이더: 사용자의 통제 없이 스스로 웹을 돌아다니며 HTTP 트랜잭션을 일으키고 콘텐츠를 받아오는 자동화된 사용자 에이전트

출처: "HTTP 완벽가이드", 이응준, 정상일 옮김, 인사이트, 2014