http 1.1과 http 2.0의 차이
HTTP 1.1의 문제점
- connection 한 개 당 하나의 요청을 처리하도록 설계됨
요청과 응답이 순차적으로 이루어지기 때문에 동시에 리소스를 주고 받는 것이 불가능
HTTP 문서 내 포함된 다수의 리소스를 처리하려면 리소스 개수에 비례하여 Latency가 길어진다
- HOL (Head Of Line) Blocking이 발생할 수 있다
네트워크에서 같은 큐에 있는 패킷이 첫 번째 패킷에 의해 지연될때 발생하는 성능 저하 가능
- RTT (Round Trip Time) 증가
매번 요청 별로 Connection을 만들게되고 TCP 상에서 동작하는 HTTP 특성상 3-way-handshake가 반복적으로 일어나며, 불필요한 RTT 증가와 네트워크 지연을 초래한다
- 무거운 Header 구조
매 요청마다 중복된 헤더 값을 전송하게 되며, 서버 도메인에 관련된 쿠키 정보도 헤더에 함께 포함되어 전송되기 때문에 헤더의 크기가 증가한다
HTTP 1.1 개선 방법
- Image Spriting
아이콘을 하나의 큰 이미지로 만들어 CSS에서 해당 이미지의 좌표 값을 지정하여 표시
- Domain Sharding
브라우저에서 여러 개의 Connection을 생성해서 병렬로 요청을 보내는 것
그러나 브라우저 별로 도메인 당 Connection 개수 제한이 존재하여 근본적 해결 불가
- Minified CSS/JavaScript
CSS와 JavaScript를 최소화
- Load Faster
head태그에 자바스크립트를 삽입하고 async나 defer 옵션을 사용해 브라우저의 파싱을 block ㅏ지 않고 로드
- Data URI Scheme
HTML 문서 내 이미지 리소스를 Base64 인코딩된 이미지 데이터로 직접 기술하여 서버로의 요청을 줄임
- SPDY
구글에서 Latency 관점으로 HTTP를 고속화한 프로토콜
HTTP를 재정의하는 것은 아니고 HTTP를 통한 전송을 재정의 한다
이는 HTTP 2.0 초안의 참고 규격이 됨
HTTP 2.0
HTTP 1.1을 완전하게 재작성 한 것이 아닌 프로토콜 성능 향상에 초점을 맞춰 수정한 버전
- Multiplexed Streams
connection 하나로 동시에 여러 개의 메시지를 주고 받을 수 있고, 응답 순서에 상관없이 stream을 주고 받는다
- Stream Prioritization
리소스 간의 의존관계에 따른 우선순위를 설정하여 리소스 로드 성능 개선
- Server Push
클라이언트가 요청하지 않은 리소스를 서버가 사전에 push하여 전송
- Header Compression
헤더 정보를 HPACK방식으로 압축
Reference