HTTP 역사
- HTTP/0.9 1991 : GET 메서드만 지원,HTTP 헤더 X
- HTTP/1.0 1996 : 메서드, 헤더 추가
- HTTP1/1 1997 : 현재 가장 많이 사용하는 버전
- 7230 ~ 7235

- HTTP/2 2015 : 성능 개선
- HTTP/3 진행중 : TCP 대신에 UDP 사용, 성능개선
TCP : HTTP/1.1, HTTP/2
UDP : HTTP/3
Youtube는 대부분 HTTP/3를 이용하나보다

HTTP 특징
- 클라이언트 서버 구조
- 클라이언트는 서버에 요청을 보내고 응답을대기
- 서버가 요청에 대한 결과를 만들어서 응답
- 무상태 프토로콜
- 서버가 클라이언트의 상태를 보존X
- 서버 확장성 높음
- 클라이언트가 추가 데이터 전송
Stateful : Stateful '구조'는 Server와 Client간 세션의 'State(상태)'에 기반하여 Client에 response를 보냄
Stateless : Stateless '구조'는 server의 응답이 client와의 세션 '상태'와 독립적
- 비연결성(connectionless)
- HTTP는 기본이 연결을 유지하지 않는 모델
- 일반적으로 초 단위의 이하의 빠른속도로 응답
- 서버 자원을 매우 효율적으로 사용할 수 있음
비연결성 한계
- TCP/IP 연결을 새로 맺어야함 3 way handshake
- 웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 JavaScript, CSS, 추가 이미지 등 수 많은 자원이 함께 다운로드 된다.
비연결성 극복
- HTTP 지속 연결에서는 연결이 이루어지고 난 뒤 각각의 자원들을 요청하고 모든 자원에 대한 응답이 돌아온 후에 연결을 종료한다.
- HTTP/2 HTTP/3에서 다 많은 최적화
HTTP 메시지
- HTML, TEXT
- IMAGE, 음성, 영상, 파일
- JSON, XML
- 가의 모든 형태의 데이터 전송가능
- 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용
HTTP 요청 메시지

- Start-line : HTTP 메소드, Request target, HTTP version
- Header : Header에는 HTTP Request 그 자체에 대한 정보
- Body : HTTP Request가 전송하는 데이터를 담고 있는 부분 전송할 데이터가 없으면 비어있음
HTTP 응답 메시지

- Start-line : Response의 Start Line에는 HTTP version, Status Code, Status Text
- Header : Header에는 HTTP Response 그 자체에 대한 정보
- Body : HTTP Response 전송하는 데이터를 담고 있는 부분 전송할 데이터가 없으면 비어있음
공통 Header
Date : 현재시간
Cache-Control : 캐시 제어
- no-store : 캐시를 저장하지 않겠다
- no-cache : 모든 캐시를 쓰기 전에 서버에 해당 캐시를 사용해도 되는지 확인하겠다
- must-revalidate : 만료된 캐시만 서버에 확인하겠다.
- public : 공유 캐시에 저장해도 된다.
- private : '브라우저' 같은 특정 사용자 환경에만 저장하겠다.
- max-age : 캐시의 유효시간을 명시하겠다.
- Transfer-Encoding : Body 내용 자체 압축 방식을 지정
- Content-Encoding : Body의 리소스 압축 방식 (Transfer-Encoding은 Body 자체이므로 다름)
- Content-type : Body의 미디어 타입 ex) application/json, text/html
- Content-Length : Body의 길이
- Content-language : Body를 이해하는데 가장 적절한 언어 ex) ko
- Connection : 클라이언트와 서버의 연결 방식 설정. HTTP/1.1은 keep-alive로 연결 유지하는게 디폴트
참고자료