[CH1] HTTP: 웹의 기초

소포카·2022년 6월 30일
post-thumbnail

HTTP란?

전 세계의 웹 서버로부터 대량의 정보를 빠르고, 간편하고, 정확하게 사람들의 PC에 설치된 웹 브라우저로 전송한다. 신뢰성 있는 데이터 전송 프로토콜을 사용한다.


리소스

웹 리소스는 웹 컨텐츠의 본체이다. 크게 정적 파일과 동적 파일로 구분된다.

  • 정적 파일: txt, html, word, jpeg, avi, etc
  • 동적 파일: 요청에 따라 콘텐츠를 생산 (라이브 영상, 주식, 쇼핑몰 등)

미디어 타입

인터넷은 수많은 데이터 타입을 다루기 때문에 HTTP는 웹에서 전송되는 객체 각각에 MIME 타입이라는 데이터 포맷 라벨을 붙인다. MIME은 이메일에서 잘 동작했기에 HTTP에서도 이를 채택하게 되었다.

웹 서버는 모든 HTTP 객체 데이터에 MIME 타입을 붙인다. 웹 브라우저는 서버로부터 응답을 받을 때, 해당 객체를 다룰 수 있는지 MIME 타입을 통해 확인한다.

MIME(Multipurpose Internet Mail Extensions)이란 각기 다른 전자메일 시스템 사이에서 메시지를 주고 받을 때 겪는 문제를 해결하기 위해 설계되었다.

MIME 타입은 사선으로 구분된 주 타입과 부 타입으로 이루어진 문자열이다.

  • HTML 문서 → text/html
  • plain ASCII → text/plain
  • JPEG 이미지 → image/jpeg
  • GIF 이미지 → image/gif

URI(uniform resource locator)

통합 자원 식별자(URI)란 서버 리소스의 이름이다. 윕 서버 리소스는 각자 이름을 갖고 있고, 클라이언트는 특정 리소스에 URI를 통해 접근할 수 있다.

URI는 URL과 URN으로 나누어진다.

URL(uniform resource locator)

통합 자원 지시자(URL)는 특정 서버의 한 리소스에 대한 구체적인 위치를 서술한다.

대부분의 URL은 세 부분으로 이루어진 표준 포맷을 따른다.

  1. 스킴(scheme): 리소스에 접근하기 위해 사용되는 프로토콜
  2. 서버의 인터넷 주소
  3. 웹 서버의 리소스

URN(uniform resource name)

통합 자원 이름은 특정 리소스에 대해 위치에 영향 받지 않는 유일무이한 이름을 뜻한다. 리소스의 위치가 변하더라도 URN은 정상 동작한다. 하지만 리소스 위치를 분석하기 위한 인프라의 부재로 아직까지 많이 사용되지는 않는다.


Transaction

HTTP transaction은 요청 명령과 응답 결과로 구성된다. 이러한 상호작용은 그림과 같이 HTTP message라고 불리는 정형화된 데이터를 이용해 이루어진다.

Method

모든 HTTP 요청 메시지는 한 개의 method를 가진다. Method는 서버에게 어떤 동작을 취해야 하는지 알려준다. 다음 표는 흔히 쓰이는 HTTP methods를 나타낸다.

HTTP methoddescription
GET서버 → 클라이언트로 지정한 리소스 전송
PUT클라이언트 → 서버로 보낸 데이터를 지정한 이름의 리소스로 저장
DELETE지정한 리소스 삭제
POST클라이언트 데이터를 서버 게이트웨이 어플리케이션으로 전송
HEAD지정한 리소스에 대한 응답에서 HTTP 헤더 부분만 전송

Status Code

모든 HTTP 응답 메시지는 상태 코드와 함께 반환된다. 상태 코드는 클라이언트에게 요청이 성공했는지, 추가 조치가 필요한지 알려주는 3자리 숫자이다.

이 때 HTTP는 텍스트로 된 사유 구절(reason phrase)도 함께 보낸다. 다만 사유 구절은 설명만을 위해 포함된 것이기에 실제 응답 처리에는 숫자로 된 상태 코드가 사용된다.


메시지

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

  • (a) 요청 메시지: 클라이언트 → 서버
  • (b) 응답 메시지: 서버 → 클라이언트
  • HTTP 메시지는 세 부분으로 이루어진다.
    • 시작줄: 요청 / 응답 내용
    • 헤더: 0개 이상의 헤더 필드, 헤더는 빈 줄로 끝난다.
    • 본문: 어떤 종류의 데이터든 들어갈 수 있다.


TCP connection

TCP/IP

HTTP는 application 계층 프로토콜이다. HTTP는 네트워크 통신과 관련된 부분을 TCP/IP에게 맡긴다. 사실 인터넷 자체가 TCP/IP에 기초하고 있다.

일단 TCP 커넥션이 맺어지면 클라이언트와 서버 컴퓨터 간 교환되는 메시지는 무결성이 보장된다.

접속

IP 주소와 포트 번호를 이용해 클라이언트는 TCP/IP로 쉽게 통신할 수 있다.

  1. 웹 브라우저: 서버의 URL에서 호스트 명을 추출
  2. 웹 브라우저: 추출한 호스트 명을 IP 주소로 변환
  3. 웹 브라우저: URL에서 포트번호 추출(있다면)
  4. 웹 브라우저: 웹 서버와 TCP 커넥션 구축
  5. 웹 브라우저: 서버에 HTTP 요청 전송
  6. 서버: 웹브라우저에 HTTP 응답 전송
  7. 커넥션이 닫히면 웹 브라우저는 문서 표시

Telnet

Telnet utility는 키보드를 목적지의 TCP 포트로 연결해주고, 출력 TCP 포트를 화면으로 연결해준다. 텔넷은 원격 터미널 세션을 위해 흔히 사용되지만 일반적인 TCP 서버에 연결하기 위해 사용될 수도 있다.


웹의 구성 요소

Proxy

클라이언트와 서버 사이에 위치한 HTTP 중개자

사용자를 대신해서 서버에 접근한다.
주로 보안을 위해 사용된다. 즉, 모든 웹 트래픽 흐름 속에서 신뢰할만한 중개자 역할을 한다.
요청과 응답을 필터링한다.

Cache

많이 찾는 웹페이지를 클라이언트 가까이 보관하는 HTTP 창고

자신을 거쳐가는 문서들 중 자주 찾는 것의 사본을 저장해 두는 HTTP 프락시 서버이다.
더욱 빠른 속도로 컨텐츠를 로딩하기 위해 사용한다.

Gateway

다른 애플리케이션과 연결된 특별한 웹 서버

주로 HTTP 트래픽을 다른 프로토콜로 변환하기 위해 사용된다.
언제나 스스로가 리소스를 갖고 있는 진짜 서버인 것처럼 요청을 다루며 클라이언트는 이를 모른다.

Tunnel

단순히 HTTP 통신을 전달하기만 하는 특별한 proxy

두 커넥션 사이에서 데이터 뚜껑을 열어보지 않고 그대로 전달만 하는 HTTP 어플리케이션이다.

대표적인 예로 웹 트래픽만 허용하는 사내 방화벽을 통과시키기 위해 SSL을 HTTP로 한 겹 감싸서 전송하는 상황이 있다.

Agent

자동화된 HTTP 요청을 만드는 준지능적 웹 클라이언트

예를 들어 사람 통제 없이 스스로 웹을 돌아다니며 컨텐츠를 받아오는 사용자 에이전트가 있다.
스파이더나 웹로봇과 같은 이름이 있다.

profile
https://github.com/sophoca

1개의 댓글

comment-user-thumbnail
2022년 11월 4일

중요한 요소들에 대해 보기 쉽게 요약되어있어서 좋은 참고가 되었습니다! :) 감사합니다.

답글 달기