목차
· HTTP란?
· HTTP 0.9 - 원라인 프로토콜
· HTTP 1.0 - 확장성 만들기
· HTTP 1.1 - 표준 프로토콜
· HTTP 2 - 더 나은 성능을 위한 프로토콜
HTTP란?
· W3(World Wide Web) 상에서 정보를 주고받을 수 있는 프로토콜이다.
· 클라이언트와 서버 사이에 이루어지는 요청/응답 프로토콜이다. 클라이언트가 HTTP를 통해 서버로 정보를 요청하면, 서버는 이 요청에 응답해 필요한 정보를 클라이언트에 전달한다.
· HTTP/2까지는 TCP를 전송 프로토콜로 사용했고, HTTP/3부터는 UDP를 사용한다.
HTTP 0.9 - 원라인 프로토콜
· 요청 메서드가 GET만 존재한다. 원라인 프로토콜로 불리었다.
GET /mypage.html
· 응답이 파일 내용 자체로 구성된다. HTML 파일 이외에 다른 유형의 문서는 전송할 수 없었다.
- HTTP 헤더가 존재하지 않았다.
<HTML>
A very simple HTML page
</HTML>
· 심플하지만, 확장해서 쓰기에는 너무 간단했다.
HTTP 1.0 - 확장성 만들기
· 헤더가 추가되었다.
- HTTP 버전을 확인할 수 있다.
- 응답 코드를 확인할 수 있다.
- Content-Type이 존재하여 HTML이 아닌 다른 문서도 전송할 수 있게 되었다.
요청
GET /mypage.html HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)
응답
200 OK
Date: Tue, 15 Nov 1994 08:12:31 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/html
<HTML>
A page with an image
<IMG SRC="/myimage.gif">
</HTML>
· 커넥션 하나당 요청 하나만 처리할 수 있었다.
- 문제점: 매번 새로운 연결로 성능이 저하되고, 서버 부하 비용이 증가한다.
HTTP 1.1 - 표준 프로토콜
· HTTP의 첫번째 표준 버전이다.
· 지정한 timeout 동안 커넥션을 닫지 않는 persistent Connection이 도입되었다.
- 여러 요청이 하나의 커넥션을 통해 처리할 수 있게 되었다.
· Pipelining 기법이 도입되었다.
- 하나의 커넥션에서 응답을 기다리지 않고, 순차적인 여러 요청을 연속적으로 보내 그 순서에 맞춰 응답을 받는 방식으로, 지연 시간을 줄이는 방법이다.
- 문제1: Head Of Line Blocking, 앞 요청의 시간이 오래 걸리면 뒤에 오는 요청도 해당 요청이 처리될 때까지 기다려야하는 현상이다.
- 문제2: Header 구조의 중복, 연속된 요청의 경우 Header 값이 같은 경우가 많은에도 불구하고 중복된 값을 그대로 전송하는 현상이다.주고 받는 데이터가 불필요하게 커진다.
HTTP 2 - 더 나은 성능을 위한 프로토콜
· 기존 버전의 성능 향상에 초점을 맞춘 프로토콜이다. 즉, 표준의 대체가 아닌 확장을 목적으로한다.
· HTTP 메시지 전송 방식이 변화되었다.
- 바이너리 프레이밍 계층을 사용하여, 파싱과 전송 속도를 높이고 오류 발생 가능성을 줄인다.
- 메시지를 프레임이라는 단위(헤더스 프레임, 데이타 프레임)로 분할하고, 이를 바이너리로 인코딩한다.
· 요청과 응답의 멀티플렉싱을 지원한다.
- HTTP 메시지를 여러 개의 바이너리 프레임으로 나누고, 이를 전송 후 받은 쪽에서 다시 조립한다.
- 받을 쪽에서 다시 조립하는 방식이므로, 요청과 응답의 순서가 의미가 없어지므로 Head Of Line Blocking 문제를 해결한다.
- 스트림: 구성된 연결 내에서 전달되는 바이트의 양방향 흐름으로, 하나 이상의 메시지가 전달될 수 있다.
· 먼저 응답 받고 싶은 요청의 우선순위(Stream Priority)를 지정할 수 있다.
· Server Push를 이용하여, 클라이언트에서 요청하지 않은 리소스를 서버에서 클라이언트로 전송할 수 있다.
· 헤더 압축을 이용하여, 헤더의 크기를 줄여 페이지 로드 시간을 줄인다.
- Header table과 Huffman Encoding 기법을 사용하여 Header 정보를 압축한다. 이를 HPACK 압축 방식이라 부른다. (RFC 7531)
- 약 85%의 데이터를 줄일 수 있다.
출처
우아한테크 - 테코톡 youtube.com/watch?v=xcrjamphIp4
https://www.whatap.io/ko/blog/38/
https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP
'네트워크' 카테고리의 다른 글
TCP vs UDP (0) | 2022.01.23 |
---|---|
[Network] 다양한 종류의 로드밸런서(Load Balancing)와 다양한 로드밸런싱 알고리즘 (0) | 2021.11.29 |
분산 서버 환경에서 세션 공유 문제 해결하기 (0) | 2021.11.29 |
REST란? REST API란? 일반적인 HTTP API가 REST API가 아닌 이유 (0) | 2021.11.10 |
[Chrome] Chrome 브라우저 NET :: ERR_CERT_INVALID (인증서)문제 해결 (0) | 2020.11.12 |
댓글