[Network] HTTP, HTTP/2

2021. 7. 20. 16:57Computer Science/네트워크

HTTP

1. 개념 및 특징

 º HTTP(HyperText Transfer Protocol)은 웹에서 클라이언트(웹 브라우저)가 웹 서버와 통신하기 위한 프로토콜 중 하나

   - 최적의 경로는 주어진 데이터를 가장 짧은 거리로 또는 가장 적은 시간 안에 전송할 수 있는 경로

 º HTTP는 비연결성 프로토콜

   - 일반적으로 초 단위 이하의 빠른 속도로 응답

   - 비연결성이기 때문에 TCP/IP 연결을 계속 새로 맺어야 한다.(3 way handshake 시간 추가가 되어 오버헤드 발생)

   - HTTP/1.1에서 Keep-alive 기능이 추가되어 한 번 맺어졌던 연결을 끊지 않고 지속적으로 유지하여 성능 개선

 º  HTTP는 무상태성 프로토콜

   - 스케일 아웃 서버 구조에 유리

   - 쿠키, 세션과 같은 상태를 유지하려는 기술들이 요구되다 보니 성능 개선이 필요

 º  HTTP 1.1은 기본적으로 Connection 한 개당 하나의 요청을 처리하도록 설계

   - 하나의 Connection에서 여러 개의 파일을 요청/응답 할 수 있도록 개선 시킨 기법을 pipelining 이라고 한다.

   - pipelining의 문제점은 순차적으로 데이터를 요청하고 받아야 하다 보니 먼저 받은 요청이 끝나지 않으면 그 뒤에 있는 요청 처리가 완료 되더라도 먼저 온 요청이 끝날때 까지 기다려야 한다. 이러한 문제를 HOL(Head Of Line) Blocking 이라고 한다.

 

HTTP/2

1. 개념 및 특징

 º HTTP/2은 HTTP/1.x의 프로토콜의 성능에 초점을 맞춰 수정한 버전

 º SPDY 프로토콜 기반으로 구현된 프로토콜

 ※ SPDY: 웹 페이지의 로딩 시간을 줄이기 위한 목적으로 구글에서 설계한 프로토콜 이다.

 

2. HTTP/2.0 주요 요소

 2-1 Binary Framing Layer

 º HTTP/2의 성능 향상 중 핵심은 새 바이너리 프레이밍 계층

   - 프레이밍 계층은 HTTP 메세지가 캡슐화되어 클라이언트와 서버 사이에 전송되는 방식을 규정

 º 줄바꿈으로 구분되는 일반 텍스트 HTTP/1.x 프로토콜과 달리, 모든 HTTP/2 통신은 더 작은 메세지와 프레임으로 분할

   - 분할된 프레임은 각각 바이너리 형식으로 인코딩

  ※ 프레임: HTTP/2에서 통신의 최소 단위이며 각 최소 단위에는 하나의 프레임 헤더가 포함된다. 프레임 헤더는 최소한으로 프레임이 속하는 스트림을 식별한다.

 

 2-2 Multiplexed Streams

  º 한 커넥션으로 동시에 여러개의 메세지를 주고 받을 수 있다.

  º 응답은 순서에 상관없이 스트림으로 주고 받는다.   

  ※ 스트림: 구성된 연결 내에서 전달되는 바이트의 양방향 흐름이며, 하나 이상의 메세지가 전달 될 수 있다.

 2-3 Stream Prioritization

  º 리소스간 의존관계 따른 우선순위를 설정하여 리소스 로드 문제를 해결 한다.

    ex. 문서 내에 CSS 파일과 이미지 파일이 존재한다면 클라이언트가 요청하는 CSS파일이 이미지 파일보다 늦어진다면 브라우저 렌더링 문제가 생긴다. 이를 해결하기 위해 리소스 우선순위를를 설정

 2-4 Server Push

  º 클라이언트 요청에 대한 응답할 뿐만 아니라 요청하지 않은 리소스를 서버가 추가적으로 PUSH를 통해 전송 한다.

    - 리소스 PUSH가 가능해지면 클라이언트가 추후에 HTML 문서를 요청할 때 해당 문서 내의 리소스를 사전에 클라이언트에서 다운로드 할 수 있도록 하여 클라이언트의 요청을 최소화할 수 있다.

 

 2-5 Header Compression

  º HTTP 전송시 리소스와 그 속성을 설명하는 Header와 같은 메타데이터를 전달한다. HTTP/1.x의 경우 이 메타데이터는 항상 일반 텍스트로 전송되고, 이로 인해 오버헤드가 발생하는 경우가 있다. HTTP/2 에서는 이러한 오버헤드를 줄이기 위해 HPACK 압축 형식을 사용하여 메타데이터를 압축한다.

   - HPACK 압축은 Header TableHuffman Encoding 기법을 사용한다.

  º 클라이언트가 두번의 요청을 보낸다고 가정하면 HTTP/1.x의 경우 두개의 요청 Header에 중복값이 존재해도 그냥 중복 전송된다. 그러나 HTTP/2에선 Header에 중복값이 존재하는 경우 Static/Dynamic Header Table 개념을 사용하여 중복 Header를 검출한다. 중복된 Header는 index값만 전송하고 중복되지 않는 Header 정보의 값은 Huffman Encoding 기법으로 처리 하여 전송 된다.

    - Static Header Table : 모든 연결에 사용될 가능성이 있는 공용 HTTP 헤더 필드를 제공(ex. 올바른 헤더 이름)

    - Dynamic Header Table : 처음에는 비어있으며, 특정 연결에서 교환되는 값에 따라 업데이트 된다.

 

2개 요청시 HPACK 압축 과정

 

HTTP/2 중복 Header 처리 과정

Reference

- https://developers.google.com/web/fundamentals/performance/http2/?hl=ko 

- https://www.whatap.io/ko/blog/38/

- https://seokbeomkim.github.io/posts/http1-http2/

- https://www.popit.kr/%EB%82%98%EB%A7%8C-%EB%AA%A8%EB%A5%B4%EA%B3%A0-%EC%9E%88%EB%8D%98-http2/

 

 

 

 

 

 

'Computer Science > 네트워크' 카테고리의 다른 글

[NetWork] Cookie  (0) 2021.01.24
[Network] Router, Routing ?  (0) 2021.01.10
[Network] HTTP - 헤더  (0) 2020.09.19
[NetWork] imap? POP3?  (0) 2020.06.03
TCP UDP 란?  (0) 2020.04.05