Skip to main content

1. HTTP 개관

HTTP를 간략하게 정리합니다.

1.1 HTTP 인터넷의 멀티미디어 배달부#

HTTP는 신뢰성이 있는 데이터 전송 프로토콜을 사용하며, 데이터가 손상되거나 꼬이지 않도록 방지합니다.


1.2 웹 클라이언트와 서버#

  • 클라이언트 ---(HTTP 요청)---> 서버
  • 클라이언트 <---(HTTP 응답)--- 서버

1.3 리소스#

웹 서버는 웹 리소스를 관리하게 제공합니다.

웹 리소스란.

  • 웹 콘텐츠의 원천
  • 정적 리소스와 동적 리소스 등이 있습니다.
  • 대표적인 예시로, 파일시스템, 텍스트파일 등등

미디어 타입#

MIME(Multipurpose Internet Mail Extensions) 타입이라는 데이터 포맷 라벨을 붙이며, 웹 서버는 모든 HTTP 객체 데이터에 MIME 타입을 붙입니다.

예를 들면 다음과 같이 붙입니다. 아래 말고도 수많은 MIME이 존재합니다.

  • HTML : text/html
  • plain ASCII 텍스트 문서 : text/plain
  • JPEG : image/jpeg
  • GIF : image/gif

URI#

서버 리소스 이름은 URI(Uniform Resource Identifier)라고 불립니다.

URI는 크게 2가지로 나눠지며, URL과 URN으로 나눠집니다.

URL#

리소스 식별자의 가장 흔한 형태이며, 리소스에 대한 구체적인 위치를 서술합니다. 보통 세 부분으로 이루어진 표준 포맷입니다.

  • 스킴(scheme) : URL의 첫번째 부분, 리소스 접근 프로토콜
  • 서버의 인터넷 주소
  • 웹 서버의 리소스

오늘날 대부분의 URI는 URL입니다.

URN#

Uniform Resource name의 약자로서, 콘텐츠를 이루는 한 리소스에 대해 유일무이한 이름 역할을 합니다. 실험 중인 상태입니다.


1.4 트랜잭션#

HTTP 트랜잭션 = 요청 + 응답

메서드#

대표적인 메서드는 GET, PUT, DELETE, POST, HEAD 등이 있습니다.

상태코드#

  • 200 : 정상
  • 302 : 다시 보내세요
  • 404 : 없어요...

좀 더 자세하게는 이후에 표현합니다.

웹 페이지는 여러 객체로 나눠질 수 있습니다.#

즉, 웹 페이지 = 리소스의 모음


1.5 메시지#

HTTP 메시지는 단순한 줄 단위의 문자열입니다.

  • 요청 메시지 : 웹 클라이언트에서 웹 서버로 보낸 HTTP 메서드
  • 응답 메시지 : 웹 서버에서 클라이언트로 가는 메시지

크게 세가지로 구성됩니다.

  • 시작줄 : 요청이라면 무엇을 해야하는 지, 응답이라면 무슨일이 일어났는지 나타냅니다.
  • 헤더 : 0개 이상, :으로 구분되며 하나의 이름과 하나의 값으로 이뤄지며 끝은 빈줄로 끝납니다.
  • 본문 : 어떤 종류의 데이터든 들어갈 수 있는 본문입니다.
시작줄(상태) { HTTP/1.0 200 OK }
응답 헤더 {
Date : ...
Server : ...
Last-modified : ...
Content-length: 403
Content-type: text/html
}
응답 본문 {
<Head>
<HEAD>...</HEAD>
<BODY>...</BODY>
</Head>
}

보통 다음과 같이 줍니다.


1.6 TCP 커넥션#

TCP/IP#

  • HTTP는 애플리케이션 계층 프로토콜 (네트워크 통신에 대해 신경쓰지 않음)
  • TCP/IP는 다음을 신경씁니다.
    • 오류 없는 데이터 전송
    • 순서에 맞는 전달 보장
    • 조각나지 않는 데이터 스트림

계층에 대한 공부는 좀 더 필요합니다. 여기서 간략하게 정리하면 다음과 같습니다.

위부터 네트워크 프로토콜 스택입니다.

  • HTTP : 애플리케이션 계층
  • TCP : 전송 계층
  • IP ; 네트워크 계층
  • 네트워크를 위한 링크 인터페이스 : 데이터 링크 계층
  • 물리적인 네트워크 하드웨어 : 물리 계층

접속, IP 주소, 포트번호#

TCP 커넥션을 하기 위해서는 IP 주소와 포트번호가 필요합니다. 이때는 URL을 통해서 알 수 있는데, 포트번호가 생략되어 있으면 80으로 가정하고 진행합니다.

telnet#

telnet을 통해서 TCP 커넥션을 만들 수 있습니다.


1.7 프로토콜 버전#

여러가지 프로토콜 버전이 있습니다.

  • HTTP/0.9 : 많은 문제가 존제.
  • HTTP/1.0 : 처음으로 널리쓰이게 된 HTTP 버전, MIME 추가
  • HTTP/1.0+ : keep-alive, 가상 호스팅, 프락시 등이 지원됩니다.
  • HTTP/1.1 : 현재 사용하는 표준 메서드, 성능 최적화 및 잘못된 기능 제거
  • HTTP/2.0 : 10장에서 추가 설명합니다.

1.8 웹의 구성요소#

  • 프락시 : 클라이언트와 서버 사이에 위치한 HTTP 중개자
  • 캐시 : 많이 찾는웹페이지를 클라이언트 가까이에 보관하는 HTTP 창고
  • 게이트웨이 : 다른 애플리케이션과 연결된 특별한 웹 서버
  • 터널 : 단순히 HTTP 통신을 전달하기만 하는 특별한 프락시
  • 에이전트 : 자동화된 HTTP요청을 만드는 semi-intelligent한 웹클라이언트

프락시#

  • 클라이언트와 서버 사이에 위치
  • 클라이언트의 모든 HTTP 요청을 받아 서버로 전달
  • 주로 보안을 위해 사용됨

캐시#

  • 자주 찾는 것의 사본을 저장하는 특별한 종류의 HTTP 프락시
  • 훨씬 문서를 더 빨리 받을 수 있음

게이트 웨이#

  • 다른 서버들의 중개자로 동작하는 특별한 서버
  • HTP 트래픽을 다른 프로토콜로 변환하기 위해 사용됨
  • 리소스를 진짜 서버 처럼 요청을 다룹니다.

터널#

  • 두 커넥션 사이 날(raw) 데이터를 열어보지 않고 전달해주는 HTTP 애플리케이션
  • 주로 비 HTTP 데이터를 하나 이상의 HTTP 연결을 통해 그대로 전송합니다.
  • 대표적인 예시로, SSL 트래픽을 HTTP 커넥션으로 전송함으로써 웹 트래픽만 허용하는 사내 방화벽을 통과시키는 것

에이전트#

  • HTTP 요청을 만들어주는 클라이언트 프로그램

1.9 시작의 끝#


1.10 추가 정보#

URL의 포맷과 인터넷에 잇는 URL들이 가리키는 다양한 리소스 형식에 대해 정리합니다. 그리고 URN으로 발전하는 과정에 대해서도 정리합니다.

HTTP 메시지#

웹 콘텐츠를 실어 나르는 HTTP 메시지에 대해 자세히 정리합니다.

커넥션 관리#

HTTP에서 관리하는 TCP 커넥션에 대해 일반적인 오해들과 잘못 작성된 큐칙 및 동작 방식에 대해 알아봅니다.

Last updated on