HyperText Transfer Protocol(하이퍼텍스트 전송 프로토콜)은 HTML 과 같은 하이퍼미디어 문서를 전송하기 위한 애플리케이션 계층 프로토콜입니다. 웹 브라우저와 웹 서버 간의 커뮤니케이션을 위해 디자인되었지만, 다른 목적으로도 사용될 수 있습니다.
HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜 입니다.
HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이기도 합니다. 클라이언트-서버 프로토콜이란 수신자(웹브라우저) 측에 의해 요청이 초기화되는 프로토콜을 의미합니다. 하나의 완전한 문서는 텍스트, 레이아웃, 이미지, 비디오, 스크립트 등 불러온 하위 문서들로 재구성됩니다.
HTTP는 클라이언트-서버 프로토콜입니다. 요청은 하나의 개체, 클라이언트(또는 그것을 대신하는 프록시)에 의해 전송됩니다. 대부분의 경우, 클라이언트는 브라우저지만, 무엇이든 될 수 있습니다. 예를 들어, 검색 엔진 인덱스를 채워넣고 유지하기 위해 웹을 돌아다니는 로봇이 그러한 경우입니다.
프록시
웹 브러우저와 서버 사이에서는 수많은 컴퓨터와 머신이 HTTP 메세지를 이어 받고 전달합니다. 여러 계층으로 이루어진 웹 스택 구조에서 이러한 컴퓨터/머신들은 대부분 전송, 네트워크 혹은 물리 계층에서 동작하며, 성능에 상당히 큰 영향을 주지만 HTTP 계층에서는 이들이 어떻게 동작하는지 눈에 보이지 않습니다. 이러한 컴퓨터/머신 중에서도 애플리케이션 계층에서 동작하는 것들을 일반적으로 프록시 라고 부릅니다.
프록시는 눈에 보이거나 그렇지 않을 수도 있으며(프록시를 통해 요청이 변경되거나 변경되지 않는경우)다양한 기능들을 수행할 수 있습니다.
캐싱
캐시는 공개 또는 비공개 가능 EX > 브라우저의 캐시
필터링
EX > 바이러스 백신 스캔, 유해 컨텐츠 차단(자녀 보호) 기능 등
로드 밸런싱
여러 서버들이 서로 다른 요청을 처리하도록 허용
인증
다양한 리소스에 대한 접근 제어
로깅
이력 정보를 저장
클라이언트가 서버와(최종 서버 또는 중간 프록시) 통신하고자 할 때 다음과 같은 과정을 수행합니다.
GET / HTTP/1.1
Host: exaple.com
Accept-Language: Kr
3.다음과 같이 서버에서 보낸 응답을 읽어들입니다.
HTTP/1.1 200 OK
Date: Sat, 09 Oct 2021 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
<!DOCTYPE html>… (here come the 29769 bytes of the requested web page)
4.연결을 닫거나 다른 요청을 위해 재사용합니다.
HTTP 파이프라이닝이 활성화되면, 첫번째 응답을 완전히 수신할 때까지 기다리지 않고 여러 요청을 보낼 수 있습니다. HTTP 파이프 라이닝은 오래된 소프트웨어와 최신 버전이 공존하고 있는, 기존의 네트워크 상에서 구현하기 어렵다는게 입증되었으며, 프레임안에서 보다 활발한 다중 요청을 보내는 HTTP/2로 교체되고 있습니다.
HTTP 메시지의 두 가지 타입인 요청(requests)과 응답(responses)은 각자의 특성있는 형식을 가지고 있습니다.
HTTP 기반으로 가장 일반적으로 사용된 API는 user_agent(웹 맥락에선 브라우저를 의미)와 서버간에 데이터를 교환하는데 사용될 수 있는 XMLHttpRequest API 입니다. 최신 Fetch API는 보다 강력하고 유연한 기능을 제공합니다.
MDN, "웹과 HTTP", https://developer.mozilla.org, (2022-11-17)