OSI 7계층 중에서 application layer를 배우면서 HTTP 프로토콜에 대한 내용이 워낙 많아서 따로 한 번 정리를 해보았습니다.
역사의 흐름 순으로 정리를 하면서 3.0 버전까지 알아보겠습니다.
method는 GET
만 존재./* 요청 */
GET /mypage.html
/* 응답 */
<HTML>
A very simple HTML page
</HTML>
Content-Type
도입으로 HTML 이외의 문서 전송 기능이 가능해짐.😜 추가 지식
- 한계
- 커넥션 하나당 요청 하나와 응답 하나만 처리 가능했음.
- 매우 비효율적인 동작과 서버 부하의 문제.
- HTTP 1.1에서 개선./* 요청 */ 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>
HTML이 아닌 파일인 이미지파일 요청 메세지
GET /myimage.gif HTTP/1.0 User-Agent: NCSA_Mosaic/2.0 (Windows 3.1) 200 OK Date: Tue, 15 Nov 1994 08:12:32 GMT Server: CERN/3.0 libwww/2.17 Content-Type: text/gif (image content)
Persistent Connection
추가됨.
Pipelining
추가.
😜 추가 지식
한계
Head Of Line Blocking
(HOL)
: 결국 앞 요청의 응답이 너무 오래걸리면 뒤 요청은 Blocking 되어버림.Header 구조의 중복
: 연속된 요청의 헤더의 많은 중복이 발생. => 메모리와 cpu리소스를 낭비./* 요청 */ GET /en-US/docs/Glossary/Simple_header HTTP/1.1 Host: developer.mozilla.org User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate, br Referer: https://developer.mozilla.org/en-US/docs/Glossary/Simple_header /* 응답 */ 200 OK Connection: Keep-Alive Content-Encoding: gzip Content-Type: text/html; charset=utf-8 Date: Wed, 20 Jul 2016 10:55:30 GMT Etag: "547fa7e369ef56031dd3bff2ace9fc0832eb251a" Keep-Alive: timeout=5, max=1000 Last-Modified: Tue, 19 Jul 2016 00:59:33 GMT Server: Apache Transfer-Encoding: chunked Vary: Cookie, Accept-Encoding (content)
기존 HTTP 1.X 버전의 성능 향상에 초점을 맞춘 프로토콜. (2015년 등장)
표준의 대체가 아닌 확장. (표준 : HTTP 1.1)
특징
⑴ HTTP 메시지 전송 방식의 전환
⑵ Multiplexed Streams
⑶ Stream Prioritization
⑷ Server Push
⑸ Header Compression
Binary Framing
계층을 추가해서 보내는 메시지를 프레임(frame)이라는 단위로 분할하며 추가적으로 바이너리로 인코딩을 한다.😜 추가 지식
- 인터리빙 : 여러개의 스트림에서 쪼개진 프레임들을 서로 끼워넣는 것.
😜 추가 지식
한계
- 각 요청마다 Stream으로 구분해서 병렬적으로 처리하지만,
결국 이에는 TCP 고유의 HOL Blocking이 존재.- 서로 다른 Stream이 전송되고 있을 때, 하나의 Stream에서 유실이 발생되거나 문제가 생기면 결국 다른 Stream도 문제가 해결될 때 까지 지연되는 현상이 발생. (신뢰성이 보장된 프로토콜이기 때문임.)
- 즉, 이러한 TCP의 태생적인 HOL Blocking을 해결하기 위해 HTTP3.0 / QUIC이 등장.
QUIC를 통해 간략화된 통신
- 그림으로 보는 통신 현상 비교
TCP 프로토콜의 신뢰성을 보장하는 통신
해당 사이트의 내용을 참고로 작성했습니다. 추후에 더 알게 되는 내용들을 추가하겠습니다.
neity16 velog
Harry's diary
HTTP vs HTTPS, HTTP 버전별 특징, HTTP Method 정리
뷰티풀 프로그래밍
jhyj0521.log
HTTP3 란 무엇일까