[목차] == 개요 == 2015년 IETF에 의해 공식적으로 발표된 HTTP/1.1의 후속 버전이다. HTTP/2의 차기 버전은 [[HTTP/3]]이다. == 상세 == 1999년에 발표된 HTTP/1.1은 텍스트 위주의 전송 프로토콜이었다. 하지만 웹 기술이 발전함에 따라 사진, 동영상 등과 같은 고용량의 멀티미디어 데이터를 전송하는 일이 많아졌고, 모바일 시장이 엄청나게 성장했다. 이에 따라 새로운 버전의 HTTP가 필요해졌다. [[구글]]이 자체적으로 SPDY라는 프로토콜을 개발함으로써 HTTP/2 개발에 불을 지폈다. 이후 2012년, IETF에서 HTTP/2의 첫 Draft로 SPDY의 구조를 채택함으로써 현재의 HTTP/2의 구조와 기능이 SPDY와 유사해졌다. [[http://lists.w3.org/Archives/Public/ietf-http-wg/2012OctDec/0447.html|First draft of HTTP/2]] 표준에서 [[TLS]]를 요구하는 것은 아니지만, SPDY에서 TLS를 요구했던 여파로 인해 모든 메이저 브라우저들이 TLS없이는 HTTP/2를 지원하지 않고 있다. 즉, TLS가 없으면 무조건 HTTP/1.1로 요청한다. [[웹2.0]]과는 전혀 관계가 없다. 웹2.0은 2004년 나온 웹의 포괄적 개념으로 현재는 사문화되었다. HTTP/2는 프로토콜로 분야가 다르다. 2020년부터 [[HTTP/3]] 규격도 진행되고 있으며, [[구글]]이나 [[유튜브]] 등의 주요 웹사이트들에서는 이미 적용 중이다. == HTTP/1.1에서의 개선점 == === Head of line blocking(HOL) === HTTP/1.1까지는 한 번에 한 파일밖에 보내지 못했다. 그래서 특정 파일의 [[로딩]]이 늦어지면 다른 파일까지 줄줄이 느려지는 [[병목 현상]]이 생기게 된다. 그래서 여러 파일을 한꺼번에 병렬 전송을 하는 식으로 로딩 시간을 줄이는 방법을 사용한다. === 중복 헤더의 제거 === 같은 내용의 헤더를 보낼 경우, 생략해버리는 식으로 처리함으로써 속도를 높이는 방식이다. === Header compression === 이전까지는 HTTP 헤더가 평문이었지만, HTTP/2에서는 헤더를 압축하여 용량 대비 처리 효율성을 높이는 방법을 사용한다. 압축을 하기 때문에 헤더 크기 자체도 크게 줄어든다. === Server push === 특정 파일을 서버에 지정해서 HTTP 전송 시 같이 밀어 넣는 방식이다. 주로 [[JavaScript]]나 [[CSS]], [[글꼴]], 이미지 파일 등을 지정한다. === Prioritization === 웹 페이지를 구성하는 파일의 우선순위를 둘 수 있다. 로딩이 빨리 되어야 하는 파일과 그렇지 않은 파일을 구분해줄 수 있고, 이들 사이에서도 중요도를 차등 배분할 수 있다. == 지원 == === 웹 브라우저 === HTTP/2 표준안이 2015년에 나왔기 때문에 [[Internet Explorer]]는 11, 그것도 [[Windows 10]] 환경에서야 지원한다. [[Windows 7]]용 IE11은 HTTP/1.1만 지원하며, [[Windows 8.1]]용 IE11은 HTTP/2의 전신인 SPDY를 지원하기는 하나, HTTP/2와의 호환성은 없기 때문에 HTTP/1.1로 로딩된다. 이전 버전의 윈도를 쓴다면 [[크롬(웹 브라우저)|크롬]]이나 [[파이어폭스(웹 브라우저)|파이어폭스]] 등 타 브라우저를 쓰는 것을 권장한다. 모바일의 경우 [[안드로이드(운영체제)|안드로이드]]는 [[안드로이드 누가|누가]] 이후부터, [[iOS]]는 9 버전부터 지원한다. 맥에서는 2015년 출시된 OS X 10.11부터, 사파리는 9부터 지원한다. === 웹 서버 === [[아파치 HTTP 서버]]는 2.4.12부터 일부 지원하다가 2.4.17부터 완전하게 지원하고 있다. Linux의 경우, 터미널에서 "a2enmod http2"를 입력하고, Apache 사이트 설정 파일에서 "Protocols http/1.1"로 된 부분을 "Protocols h2 http/1.1"로 변경해주면 된다. [[NGINX]]는 1.9.5부터 일부 지원하다가 1.13.9 버전에서 완전하게 지원하고 있다. NGINX의 사이트 설정 파일에서 "listen 443 ssl;"로 된 부분을 "listen 443 ssl http2;"로 변경해주면 된다. [[인터넷 정보 서비스]]는 버전 10부터 지원하고, Windows Server 2016이나 [[Windows 10]] 운영체제에서 돌려야 한다. [[WebtoB]]는 버전 5.0 SP 0 Fix #4 (5.0.0.4) 부터 지원한다. *NODE.HTTP2Flag = Y 옵션을 추가하면 된다. === 웹 어플리케이션 서버 === [[Tomcat]]에서 지원하며 server.xml을 수정해야 한다. == HTTP/2 지원 사이트 == [[웹 브라우저]]의 개발자 도구를 이용해 접속한 웹사이트의 HTTP/2 지원 여부를 확인할 수 있다. 이전까지는 HTTP/2를 지원하는 한국 사이트는 손에 꼽힐 정도였으나, 2020년을 기점으로 꾸준히 증가하여 현재는 대부분의 웹사이트가 지원하고 있다. 일부는 [[HTTP/3]]을 선행 적용하기도 한다. [[분류:인터넷]][[분류:통신]]