SPDY ( Stream Control Transmission Protocol )
- HTTP/2 로 전환 되기 전 google 이 진행했던 웹 가속 프로토콜로 https 기반의 프로토콜 서비스로 현재는 HTTP/2에 흡수되어 개발이 종료 되었음.
SPDY 지원 가능 브라우져 사용율( 77.39% ) ( 2016년에 chrome에서 지원 제거될 예정 )
HTTP/2 ( HyperText Transfer Protocol 2 )
- 프로토콜 선언 h2, h2c 가 존재함 ( 좀더 확장 가능성 있음 )
- h2의 경우 https 프로토콜 http/1.1 을 http/2 프로토콜로 사용이 가능
h2는 SSL인증서를 통한 TLS 암호화를 통해 헤더를 압축 전송한다. - 단점: 브라우져 지원에 차이가 있음 (h2 HTTP/2 지원 가능 브라우져 사용률 = 70.15%)
Internet Explorer 11 지원 (윈도우 10만 지원)
EDGE 지원
EDGE mobile 지원
Firefox 36이상
Firefox for Android 45이상
Chrome 41이상
Chrome for android 49 이상
Safari(OSX 10.11) 9 이상
Safari(iOS) 9.2이상
Opera Software Opera 28 이상
Opera Software Opera mobile 36 이상 - 결론: 보편적 HTTPS 서비스가 된다는 조건하에 구현 가능( let’s encrypt )
- h2c의 경우 http 프로토콜 http/1.1 을 http/2 프로토콜로 전환 가능
h2c는 인증서없이 보편적 웹 프로토콜을 목표로 하기 때문에 base64로 압축 전송을 한다. - 단점: 지원하는 브라우져가 현재(2016-04-07) 없음
- 결론: 구현 방법이 쉽지만 지원하는 브라우져가 없음 (현재 curl 7.43 버전 지원 )
아파치 2.4.17 버전 부터 DSO 모듈로( mod_http2.so ) HTTP/2를 지원 한다.
CentOS 6.x 대에서의 적용 방법에 대한 문서 이다.
먼저 CentOS 6.x 의 경우 기본적으로 openssl-1.0.1 이 설치 되므로 1.0.2 버전을 별도 컴파일 해야 한다.
( https://www.openssl.org/source )
1 2 3 4 5 6 7 8 9 10 11 12 |
~]# cd /opt ~]# wget https://www.openssl.org/source/openssl-1.0.2h.tar.gz ~]# tar xvfzp openssl-1.0.2h.tar.gz ~]# cd openssl-1.0.2h ~]# ./config --prefix=/usr/local/openssl shared zlib ~]# make ~]# make install ~]# rm -rf /usr/local/openssl/ssl/certs ~]# ln -s /etc/pki/tls/certs /usr/local/openssl/ssl/certs ~]# ln -s /etc/pki/tls/certs/ca-bundle.crt /usr/local/openssl/ssl/cert.pem ~]# echo /usr/local/openssl/lib > /etc/ld.so.conf.d/openssl.conf ~]# ldconfig |
이후 의존성인 nghttp2 를 설치한다 epel-release 에 있기 때문에 yum 에 repo 추가가 되어 있어한다.
1 |
~]# yum install nghttp2 libnghttp2-devel |
Centos6 에 apache 2.4 설치의 경우 apr, apr-util, pcre 버전을 별도 컴파일 해야 설치 할 수 있다.
( https://apr.apache.org/download.cgi / ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
~]# cd /opt ~]# wget http://apache.mirror.cdnetworks.com/apr/apr-1.5.2.tar.gz ~]# wget http://apache.mirror.cdnetworks.com/apr/apr-util-1.5.4.tar.gz ~]# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.gz ~]# tar xfzp apr-1.5.2.tar.gz ~]# cd ./apr-1.5.2 ~]# ./configure ~]# make && make install ~]# cd .. ~]# tar xfzp apr-util-1.5.4.tar.gz ~]# cd ./apr-util-1.5.4 ~]# ./configure --with-apr=/usr/local/apr ~]# make && make install ~]# cd .. ~]# tar xfzp pcre-8.38.tar.gz ~]# cd ./pcre-8.38 ~]# ./configure ~]# make && make install ~]# cd .. |
이후 아파치를 컴파일 한다. 여기서는 apache 2.4.20 버전을 설치 하였다. ( http://httpd.apache.org )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
~]# cd /opt ~]# wget http://mirror.navercorp.com/apache/httpd/httpd-2.4.20.tar.gz ~]# tar xvfzp httpd-2.4.20.tar.gz ~]# cd httpd-2.4.20 ~]# ./configure \ --prefix=/usr/local/apache \ --with-mpm=prefork \ --enable-cache \ --enable-mem-cache \ --enable-deflate \ --enable-expires \ --enable-cgi \ --enable-vhost-alias \ --enable-rewrite \ --enable-so \ --enable-mime-magic \ --enable-mods-shared=all \ --enable-module=shared \ --enable-ssl \ --enable-http2 \ --with-ssl=/usr/local/openssl \ --with-apr=/usr/local/apr \ --with-apr-util=/usr/local/apr ~]# make ~]# make install |
이후 httpd.conf 에서 http2_module을 주석 해제 하고 httpd-ssl.conf를 HTTP/2를 지원하도록 수정 한다.
1 2 3 4 5 |
LoadModule http2_module modules/mod_http2.so <IfModule http2_module> ProtocolsHonorOrder On Protocols h2 h2c http/1.1 </IfModule> |
1 2 3 4 |
SSLProtocol ALL -SSLv2 -SSLv3 SSLCipherSuite "EECDH+AES128:EECDH+AES256:+SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:RSA+3DES:!DSS" SSLProxyCipherSuite "EECDH+AES128:EECDH+AES256:+SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:RSA+3DES:!DSS" SSLHonorCipherOrder on |
파이어 폭스 > 디버그 모드 > 네트워크 에서 헤더 확인을 할경우 HTTP/2.0 을 확인할 수 있다.