-
기본적으로 연결당 하나의 요청을 처리하도록 설계
-
그로 인해 RTT 증가
-
RTT 증가를 해결하기 위해 다양한 기술 사용
-
이미지스프라이트 : 여러개의 이미지를 하나의 이미지에 합쳐서 하나의 이미지만 다운 받고 bacground-position으로 특정 이미지 표기
-
코드압축 : 코드에서 들여쓰기, 개행문자, 빈칸 등의 필요없는 부분을 제거하여 용량을 낮춤
-
Base64 인코딩 : 이미지를 html내에 base64 문자열로 첨부할 경우 37%정도의 용량이 증가하지만 서버에 HTTP 요청을 할필요가 없어짐
-
keep-alive 옵션 : 매번 TCP 연결을 새로 하지 않고 한번 연결만으로 여러개의 파일 송수신 가능(HTTP/1.0에서도 존재했지만 HTTP/1.1에서 표준화)
-
-
HOL Blocking 문제
- 네트워크에서 같은 큐의 첫번째 패킷에 의해 지연될 때 발생하는 성능 저하
- 위의 이미지에서 image.jpg, styles.css, data.xml은 순차적으로 받아지지만 image.jpg의 다운이 지연될 경우 전체 다운로드가 지연됨
-
SPDY 프로토콜에서 파생
-
HTTP/1.x 보다 지연 시간을 줄이고 응답시간을 더 빠르게 할 수 있음
-
멀티플렉싱
,헤더 압축
,서버 푸시
,스트림 우선순위 설정
을 지원 -
HOL Blocking을 해결
-
멀티플렉싱 (Multiplexed Streams)
-
헤더 압축 (Header Compression)
- HTTP/1.x의 크기가 큰 헤더의 문제를 HTTP/2에서는 헤더 압축으로 해결
허프만 코딩
압축 알고리즘을 사용하는 HPACK 압축 형식을 가짐- 허프만 코딩 (Huffman Coding)
- 문자열을 문자 단위로 쪼개고 빈도수를 센다
- 빈도가 높은 정보는 적은 비트수를 사용하여 표현
- 빈도가 낮은 정보는 많은 비트수를 사용하여 표현
- 전체 데이터의 표현에 필요한 비트양을 줄임
-
서버 푸시 (Server Push)
-
스트림 우선순위 설정 (Stream Prioritization)
- 클라이언트가 선호하는 응답 수신 방식을 지정해서 응답을 받을 수 있음
- 예) html문서 내에 css파일 1개와 이미지파일 2개가 존재하고 이를 클라이언트가 요청할 경우
- css파일의 수신이 이미지파일보다 늦어질 경우 브라우저 렌더링에 문제 발생
- 이러한 상황을 고려하여 리소스 간의 의존관계에 따른 우선순위 설정 가능