HTTP 2.0이라고도 불리는 HTTP/2는 기존 HTTP/1.1의 성능 한계를 개선하기 위해 등장한 프로토콜
로드 속도를 향상시키고 네트워크 자원을 효율적으로 사용할 수 있도록 여러 기능들이 추가됨
가장 핵심적인 변화는 Multiplexing
HTTP/1.1에서도 Pipelining을 통해 하나의 TCP 연결을 여러 요청에 재사용할 수는 있었음
but 각 요청에 대한 응답이 순차적으로 처리되어야 했기 때문에 동시에 여러 요청 병렬적으로 처리하는 데 한계가 있었음
반면
HTTP/2는 하나의 연결 안에서 여러 요청과 응답을 서로 독립적인 스트림으로 처리할 수 있도록 설계되어, 완전한 병렬 처리가 가능해짐
이로 인해 리소스 로딩 속도가 크게 개선
다음 주요 특징 헤더 압축
HTTP/1.1은 매 요청마다 거의 동일한 헤더 정보를 반복적으로 전송했기 때문에, 네트워크 상에서 많은 양의 데이터가 불필요하게 오가는 문제가 있었음
HTTP/2에선 HPACK 이라는 압축 방식을 적용하여, 이러한 중복 줄이고 Huffman coding을 통해 데이터 전송량을 줄였음
또한 서버 푸쉬 기능을 제공함
이는 클라이언트가 특정 HTML 문서를 요청했을 때, 서버가 해당 페이지에 필요하다고 예상되는 CSS나 JS파일 등을 클라이언트가 요청하지 않았더라도 미리 함께 전송하는 기능
이를 통해 초기 페이지 렌더링 속도를 개선할 수 있는 장점이 있음
클라이언트가 한 번의 연결에 여러 요청을 연달아 보내고, 서버는 그 요청들을 처리해 순서대로 응답을 주는 방식
keep-alive 연결 위에서 작동함
Pipelining 덕분에 클라이언트는 첫 번째 응답을 기다리지 않고 두번째, 세번째 요청을 보낼 수 있게 되어 성능이 일부 개선됨
하지만, 서버가 응답을 반드시 요청 순서대로 반환해야 하므로 여전히 HOL Blocikng 문제로 인한 성능 이슈 존재