책과 강연/HTTP 완벽가이드

HTTP 완벽가이드 1장 : HTTP 개관 (용어 정리)

데비시 2023. 10. 4. 21:29
 

HTTP 완벽 가이드 - 예스24

웹 세상을 떠받치고 있는 HTTP에 대한 모든 것모든 성공적인 웹 트랜잭션 뒤에는, 웹 클라이언트와 서버가 문서와 정보를 교환하는 언어인 HTTP가 있다. HTTP는, 회사 인트라넷에 접근하거나 절판된

www.yes24.com

 

 

1장은 앞으로 배울 내용들에 대한 간단한 소개 및 기본적인 단어 정리이다.

책 내용에서 부족한 부분들을 일부 보충하여서 정리하였으며, 보충한 문서는 최하단의 별도로 표기하였다.

 

HTTP란?

HyperText Transfer Protocol의 약자로 주로 서버와 클라이언트(웹 브라우저)간 요청/응답 프로토콜이다.

 

웹 서버

웹 콘텐츠를 보유하고 있으며, 클라이언트의 요청에 따라 필요한 데이터를 주고 받는 역할을 수행한다.

 

웹 리소스

웹에서 활용하는 모든 웹 콘텐츠를 의미한다. 

모든 종류의 정적 파일(이미지, 비디오, 텍스트)과 동적 콘텐츠들(웹 게이트웨이, 검색엔진)을 포함한다.

 

미디어 타입(MIME Type)

MIME(Multipurpose Internet Mail Extensions)는 전자 우편을 위한 인터넷 표준 포맷이다. 이메일에서 작동이 잘 되었기 때문에, HTTP에서도 멀티미디어 콘텐츠를 기술하고 라벨을 붙이기 위해 채택되었다.

HTTP 헤더에 Content-Type에 표시된다.

예를 들면, text/plain은 단순한 텍스트 문서이다 수백가지가 넘기 때문에, 자세한 건 이 책의 부록D나 인터넷 문서를 찾아보자.

 

URI

Uniform Resource Identifier로 웹 서버 리소스를 식별하는 주소이다. 이 URI를 통해서 우리는 원하는 정보를 찾아올 수 있다.

 

URI는 크게 두 종류 URL(Uniform Resource Locator)과 URN( Uniform Resource Name)이 존재한다.

URN은 이름을 통한 식별이지만, 인프라나 여러가지 이유 때문에 아직은 제대로 사용하지 않는다.

URL은 리소스에 구체적인 위치를 통해서 식별하는 것으로 오늘날 통상적으로 URL = URI로 사용된다.

 

HTTP 트랜잭션

HTTP 트랜잭션은 HTTP의 통친 처리 과정으로 응답-요청으로 이루어진 한 사이클을 의미한다.

아래와 같은 구성 요소들을 가진다.

 

- 요청 명령 : 클라이언트에서 서버로 요청

- 응답 결과 : 서버에서 클라이언트에게 반환하는 값

- HTTP 메서드 : 요청 명령의 종류 (Get, Post, Delete, Put, Head)

- 상태 코드 : 요청에 대한 상태(성공, 실패, 실패의 원인)와 사유 구절(상태에 대한 좀 더 구체적인 텍스트)

 

또한 , 웹 페이지는 하나의 트랜잭션이 아닌 여러 트랜잭션의 모음이다.

HTML 뼈대는 한 번의 트랜잭션으로 가져오지만, 이미지와 같은 HTML의 요소들은 추가적인 트랜잭션을 통해서 가져온다.

 

HTTP 메시지 - 3장 내용

단순한 문자열로 HTTP 요청/응답에 대한 정보를 담고 있다.

이 또한, 세 가지 구성요소로 이루어져있다.

- 시작줄(start line) : 메시지의 첫 줄로, 무엇을 요청했는지 또는 어떻게 응답했는 지(상태코드)가 담겨있다.

- 헤더(header) : 데이터 블록 맨 앞에서 데이터에 대한 정보를 담고 있다. 헤더는 하나의 이름과 하나의 값을 가진 필드의 집합이다.

- 본문(body) : 어떤 종류의 데이터든 들어갈 수 있는 데이터

 

TCP 커넥션 - 4장 내용

전송 제어 프로토콜(Transmission Control Protocol)이다.

HTTP 네트워크 통신은 TCP/IP에 맡긴다.

 

TCP는 아래 장점을 제공한다.

- 오류 없는 데이터 전송

- 순서에 맞는 전달

- 조각나지 않는 데이터 스트림

 

이런 TCP 커넥션을 클라이언트와 서버는 맺어야한다. 이 커넥션을 위해서 서버의 주소를 알아야할 필요가 있는데, 이 때 URL을 흔하게 사용한다. URL은 도메인주소서비스를 이용하여 포트번호와 IP 주소로 치환하여 연결할 수 있게 된다.

 

HTTP 프로토콜 버전 - 10장 내용

HTTP/0.9 : 91년 초 탄생, HTTP의 프로토 타입. 디자인 결함이 존재, 구식 클라이언트하고만 사용 가능, GET 메서드만 사용 가능, MIME, 헤더 등을 지원하지 않음

- HTTPS 탄생 : 94년, SSL을 통하여 웹 브라우저의 보안을 강화한 버전이 출시

 

HTTP/1.0 : 96년 1월 출시(RFC 1945), 대중화된 버전. 버전 번호, 헤더, 추가 메서드, 멀티미디어 객체 처리 등의 기능을 제공. 하지만, 잘 정의된 명세는 아님. 잘 동작하는 용례의 모음에 가깝다.

 

HTTP/1.0+ : 상업적인 성공에 힘입어서, 원하는 기능을 추가한 버전. keep-alive , 가상 호스팅, 프락시 연결 등 공식적이지는 않지만, 필요한 기능들이 확장된 형태

 

HTTP/1.1 : 97년 1월 출시(RFC 2068), HTTP의 잘못된 설계 및 구조적 결함 교정, 성능 최적화,오류 기능 제거를 진행하였으며 HTTP/2.0이 나올때까지 15년간 꾸준히 업데이트를 진행하였다.

- HTTPS 공식화 : 2000년 5월(RFC 2818) TLS(SSL의 표준버전)의 출현으로 공식적으로 규정 

- REST API : 2000년 출시, API를 보다 효율적으로 다룰 수 있는 REST 아키텍처가 공개됨

- SSE(Server-sent events) : 2004년 출시, 요청 없이도 서버에서 클라이언트로 메시지를 보낼 수 있음, 단 이는 공식 표준이 생기지 않음

- REST API 보편화 : 2010년, RESTful API가 대중화 됨 

- WebSocket 표준화 : 2011년, RFC 6455로 표준

 

HTTP/2 : 15년 5월 출시(RFC 7540), 기존 HTTP 전송 방식을 재정의하는 SPDY 프로토콜을 기반으로 HTTP/2가 만들어집니다. HTTP/2는 HTTP/1.1과 호환되어, 대부분에 웹 어플리케이션이 쉽게 교체가 가능하면서도 몇 가지 큰 변화를 가져왔습니다.

- 텍스트 프로토콜이 아닌 이진 프로트콜 사용

- 다중화 프로토콜. 동일한 연결에 대한 병렬 요청 수행 가능

- 헤더 압축을 통합 오베허드 및 중복 데이터 제거

- 서버가 서버 푸쉬라는 메커니즘을 통해 클라이언트 캐시에 데이터를 저장 가능

 

HTTP/3 : 22년 6월 출시(RFC 9114), 전송 계층에서 TCP과 아닌 QUIC를 사용합니다. HTTP/2는 단일 TCP 연결을 통해 실행되어서, TCP 계층에서 손실된 패킷을 가짐 및 재전송이 되는 모든 스트림을 차단할 수 있습니다,. QUIC는 UDP를 통해 여러 스트림을 실행하고, 각 스트림에 대해 독립적으로 패킷 손실 감지 및 재전송을 구현합니다. 즉, 오류가 발생한 패킷에 데이터가 있는 스트림만 차단됩니다. 

 

HTTP Proxy - 6장 내용

프록시는 서버와 클라이언트 사이에 위치하여 대신 요청과 응답을 받아준다. 

 

이와 같은 포워드 프록시 서버의 경우, 사용자의 HTTP 요청을 받아서 대신 웹 서버에 접근한다. 이 때. 요청과 응답을 필터링하여 신뢰할 수 있는 정보만 사용자에게 전달해준다. 

이 예시처럼, 프록시 서버는 보통 보안을 위해서 사용된다.

 

HTTP Cache - 7장 내용

웹 캐시와 캐시 프락시는 자주 사용하는 문서의 사본을 저장해두는 특별한 종류의 HTTP 프록시 서버이다. 클라이언트가 같은 문서를 요청하면, 캐시로 부터 그 사본을 받을 수 있다. 이러면, 멀리 떨어진 웹 서버보다 빠르게 문서를 다운 받을 수 있다

 

Gateway - 8장 내용

게이트웨이는 다른 서버들의 중개자로 동작하는 특별한 서버다. 게이트웨이는 주로 HTTP 트래픽을 다른 프로토콜로 변환하기 위해 사용된다. 게이트웨이는 언제나 스스로가 리소스를 갖고 있는 진짜 서버인 것처럼 요청을 다루기에 클라이언트는 이런 사실을 알아채기 힘들다.

예를 들어서, HTTP/FTP 게이트웨이로 요청을 하면, HTTP요청을 게이트웨이가 받아서, FTP 프로토콜을 이용하여 관련된 문서를 가져온 후, 이를 다시 HTTP에 담아서 클라이언트에게 반환한다.

 

터널 - 9장 내용

터널은 두 커넥션 사이에서 날(Raw) 데이터를 열어보지 않고 그대로 전달해주는 HTTP 어플리케이션이다.

터널을 사용하는 대표적인 예로, 암호화된 SSL 트래픽을 HTTP 커넥션으로 전송함으로써 웹 트래픽만 허용하는 사내 방화벽을 통과시키는 것이 있다.

 

에이전트 - 9장 내용

사용자를 위해 HTTP 요청을 만들어주는 클라이언트 프로그램이다. 브라우저도 에이전트의 하나이다.

 

보충학습(단어 정리)

- 트래픽은 네트워크 통신으로 생각하면 편하다.

- 서버는 네트워크를 통해서 요청을 처리하고 데이터나 서비스를 제공한다.

- 애플리케이션은 사용자가 특정 작업이나 기능을 수행하는 데 도움을 주는 소프트웨어다. 대부분 서버가 있지만, 없는 경우도 있다.

- 프로그램은 컴퓨터에서 특정 문제를 해결하는 코드들의 모음이다. 즉, 애플리케이션보다 더 큰 개념으로, 모든 앱은 프로그램이지만, 모든 프로그램은 앱이 아니다. 구체적으로, 운영체제와 같은 인터페이스 등을 이용한 유저에 상호작용 없이 백그라운드에서 돌아가는 프로그램을 시스템 소프트웨어라 한다. 위에서 우리가 흔히 말하는 유저가 어떠한 기능을 수행하기 위해서 인터페이스를 통해서 작동하는 프로그램을 애플리케이션 프로그램(애플리케이션 프로그램, 앱, 응용 애플리케이션 등)이라 한다.

 

참고문서

http의 역사, mdn : https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP

http/2, wikipedia : https://en.wikipedia.org/wiki/HTTP/2

application software, wikipedia : https://en.wikipedia.org/wiki/Application_software