HTTP 개요

HTTP 간략하게 보기

[1] HTTP (Hypertext Transfer Protocol)

  • HTTP는 문자 그대로 HTML 문서와 같은 하이퍼미디어 문서를 전송하기 위한 프로토콜이다.
  • HTTP의 확장성 덕분에 오늘날에는 하이퍼텍스트 문서 뿐만 아니라 이미지, 비디오, HTML 폼 결과를 전송할 수도 있다.

[2] HTTP 특징

HTTP는 클라이언트-서버 프로토콜이다.

  • 클라이언트와 서버가 개별적인 메시지 교환에 의해 통신한다.
    • 요청(requests): 클라이언트에 의해 전송되는 메시지
    • 응답(responses): 서버에서 응답으로 전송되는 메시지

HTTP는 무상태 프로토콜이다.

  • 상태(데이터)를 저장하지 않는다.
  • 사용자와 페이지 사이에 상호작용(예: 쇼핑몰 장바구니)이 필요하다면 HTTP 쿠키를 사용해 세션을 만들어 데이터를 저장할 수 있다.

HTTP는 간단하다.

  • 사람이 읽기 쉽다.
  • HTTP 메시지를 프레임별로 캡슐화하여 간결하게 표현한다.

HTTP는 확장가능하다.

  • HTTP 헤더는 HTTP를 확장하기 쉽게 해준다.

[2] HTTP 기반 시스템의 구성요소

클라이언트

  • 사용자를 대신하여 동작하는 모든 도구로, 주로 브라우저에 의해 수행된다.
  • 브라우저는 항상 요청을 보낸다.

웹 서버

  • 서버는 클라이언트의 요청에 대한 문서를 제공한다.

프록시

  • 웹 브라우저와 서버 사이에서는 수많은 컴퓨터와 기계가 HTTP 메시지를 이어 받고 전달한다.
  • 프록시는 어플리케이션 계층에서 동작하는 중간 단계의 컴퓨터 혹은 기계를 의미한다.
  • 프록시를 통해 요청이 변경될 수도 있고 변경되지 않는 경우도 있다.
  • 프록시는 다양한 기능을 수행할 수 있다.
    • 캐싱 (예: 브라우저 캐시)
    • 필터링 (예: 바이러스 필터링, 유해 컨텐츠 필터링)
    • 로드 밸런싱: 여러 서버들이 서로 다른 요청을 처리하도록 허용
    • 인증: 접근 제어
    • 로깅 : 이력 정보 저장

[3] HTTP로 제어할 수 있는 것

캐싱(Caching)

  • 서버는 프록시와 클라이언트에게 캐시 대상기간을 지시할 수 있다.
  • 클라이언트는 프록시에게 저장된 문서를 무시하라고 지시할 수 있다.

인증(Authentication)

  • HTTP WWW-Authenticate 헤더HTTP 쿠키를 사용하여 구현할 수 있다.

세션(Session)

  • HTTP 쿠키를 사용하여 서버 상태와 요청을 연결할 수 있다.

Origin 제약 완화

  • 브라우저는 보안상의 이유로 동일한 origin으로부터 온 페이지만이 웹 페이지의 전체 정보에 접근할 수 있도록 한다.
  • HTTP 헤더를 사용하여 페이지가 동일 origin에서 온 것인지 확인하는 부담을 줄일 수 있다.

프록시(Proxy)와 터널링(Tunneling)

  • HTTP 요청이 네트워크 장벽을 넘기 위해 프록시를 통해 나간다.

[4] HTTP 흐름

  1. TCP 연결을 연다.
  2. HTTP 메시지를 전송한다.
  3. 서버에 의해 전송된 응답을 읽는다.
  4. 연결을 닫거나 다른 요청에 재사용한다.

[5] HTTP 메시지 구조

요청 메시지

>
1
2
3
GET / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: fr
  • 라인 1의 GET: HTTP 메서드로 클라이언트가 수행하고자 동작을 알 수 있다.
  • 라인 1의 /: 리소스의 경로
  • 라인 1의 HTTP/1.1: HTTP 프로토콜 버전
  • 라인 2-3 전체: HTTP 헤더로 서버에 대한 추가 정보를 나타낸다.

응답 메시지

>
1
2
3
4
5
6
7
8
HTTP/1.1 200 OK
Date: Sat, 09 Oct 2010 14:28:02 GMT
Server: Apache
Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT
ETag: "51142bc1-7449-479b075b2891b"
Accept-Ranges: bytes
Content-Length: 29769
Content-Type: text/html
  • 라인 1의 HTTP/1.1: HTTP 프로토콜 버전
  • 라인 1의 200: 상태 코드
  • 라인 1의 OK: 상태 코드 설명
  • 라인 2-8 전체: HTTP 헤더들

참고

This post is licensed under CC BY 4.0 by the author.