HTTP/2

 

1. 개요
2. 상세
3. HTTP/1.1에서의 개선점
3.1. Head of line blocking(HOL)
3.2. 중복 헤더의 제거
3.3. Header compression
3.4. Server push
3.5. Prioritization
4. 지원
4.1. 웹 브라우저
4.2. 웹 서버
4.3. 웹 어플리케이션 서버
5. HTTP/2가 적용된 사이트


1. 개요


2015년 IETF에 의해 공식적으로 발표된 HTTP/1.1의 차기 버전이다. Hypertext Transfer Protocol Version 2 (HTTP/2)

2. 상세


1999년에 발표된 HTTP/1.1은 텍스트 위주의 전송 프로토콜이었다. 하지만 웹 기술이 발전함에 따라 사진, 동영상 등과 같은 고용량의 멀티미디어 데이터를 전송하는 일이 많아졌고, 모바일 시장이 엄청나게 성장했다. 이에 따라 새로운 버전의 HTTP가 필요하다고 주장되었다. 이에 구글은 자체적으로 SPDY라는 프로토콜을 개발함으로써 HTTP/2 개발에 불을 지폈다. 이후 2012년, IETF에서 HTTP/2의 첫 Draft로 SPDY의 구조를 채택함으로써 현재의 HTTP/2의 구조와 기능이 SPDY와 유사하다. First draft of HTTP/2
표준에서 TLS를 요구하는 것은 아니지만, SPDY에서 TLS를 요구했던 여파로 인해 모든 메이저 브라우저들이 TLS없이는 HTTP/2를 지원하지 않고 있다. (TLS가 없으면 무조건 HTTP/1.1로 요청한다.)
웹2.0과는 그다지 관계없다. 이쪽은 HTTP/2보다 훨씬 먼저 나온 웹의 포괄적 개념이다.
2020년 말 들어서는 HTTP/3 규격도 논의되고 있다. 구글이나 유튜브 등에 선행 적용 중이다.

3. HTTP/1.1에서의 개선점



3.1. Head of line blocking(HOL)


HTTP/1.1까지는 한 번에 한 파일밖에 못 보냈다. 그래서 특정 파일의 로딩이 늦어지면 다른 파일까지 줄줄이 느려지는 병목 현상이 생기게 된다. 그래서 여러 파일을 한꺼번에 병렬 전송을 하는 식으로 로딩 시간을 줄이는 방법을 사용한다.

3.2. 중복 헤더의 제거


같은 내용의 헤더를 보낼 경우, 생략해버리는 식으로 처리함으로써 속도를 높이는 방식이다.

3.3. Header compression


이전까지는 HTTP 헤더가 평문이었지만, HTTP/2에서는 헤더를 압축하여 용량 대비 처리 효율성을 높이는 방법을 사용한다. 압축을 하기 때문에 헤더 크기 자체도 크게 줄어든다.

3.4. Server push


특정 파일을 서버에 지정해서 HTTP 전송 시 같이 밀어 넣는 방식이다. 주로 JavaScriptCSS, 글꼴, 이미지 파일 등을 지정한다.

3.5. Prioritization


웹 페이지를 구성하는 파일의 우선순위를 둘 수 있다. 로딩이 빨리 되어야 하는 파일과 그렇지 않은 파일을 구분해줄 수 있고, 이들 사이에서도 중요도를 차등 배분할 수 있다.

4. 지원



4.1. 웹 브라우저


일단 2015년에 표준안이 나왔기 때문에 인터넷 익스플로러는 11, 그것도 Windows 10 환경에서야 지원한다. Windows 7용 IE11은 HTTP/1.1만 지원하며, Windows 8.1용 IE11은 HTTP/2의 전신인 SPDY를 지원하기는 하나, HTTP/2와의 호환성은 없기 때문에 HTTP/1.1로 로딩된다. 이전 버전의 윈도를 쓴다면 크롬이나 파이어폭스 등 타 브라우저를 쓰는 것을 권장한다. 모바일의 경우 안드로이드누가 이후부터, iOS는 8 버전부터 지원한다.
맥에서는 OS X 10.11부터, 사파리는 9부터 지원한다.

4.2. 웹 서버


아파치 HTTP 서버는 2.4.12부터 일부 지원하다가 2.4.17부터 완전하게 지원하고 있다. mod_http2 모듈을 추가 설치하는 작업이 필요하다.
NGINX는 1.9.5부터 일부 지원하다가 1.13.9 버전에서 완전하게 지원하고 있다. ngx_http_v2_module을 추가 설치해야 한다.
인터넷 정보 서비스는 버전 10부터 지원하고, Windows Server 2016이나 Windows 10 운영체제에서 돌려야 한다.

4.3. 웹 어플리케이션 서버


톰캣에서 지원하며 server.xml을 수정해야 한다.

5. HTTP/2가 적용된 사이트


웹 브라우저의 개발자 도구를 이용해 프로토콜을 확인하거나, 크롬 확장 프로그램 HTTP Indicator를 사용하면 접속한 웹사이트의 HTTP/2 지원 여부를 확인할 수 있다. 일부는 HTTP/3을 선행 적용(★)하기도 한다.