HTTP/2协议介绍
http://httpwg.org/specs/rfc7540.html#rfc.section.2.1
当前实现
HTTP/2 server端实现
1. NGINX
要求nginx的最低版本是1.9.5,openssl的最低版本是1.0.2
1 前置软件
pcre,openssl,zlib
2 安装nginx
# 下载地址 http://nginx.org/download/
tar -zxvf nginx-1.13.6.tar.gz
cd nginx-1.13.6
# --with-openssl 和--with-pcre指的是两个软件的源码路径。后面两个参数开启ssl和http2模块
./configure --with-openssl=../openssl-1.0.2e --with-pcre=./pcre --with-http_ssl_module --with-http_v2_module
make
make install
3 申请自签名证书。这种签名不会被浏览器认可,所以会被标记成不安全
。。。
4 开启ssl和http2,更改nginx.conf
server {
listen 443 ssl http2;
server_name localhost;
ssl on;
ssl_certificate /usr/local/nginx/conf/server.crt;
ssl_certificate_key /usr/local/nginx/conf/server_nopwd.key;
...
}
5 将http请求转发到https
server {
listen 80;
server_name localhost;
return 301 https://$host$request_uri;
...
}
6 多台机器部署请求转发
http {
upstream project{
server 10.221.85.193:8083;
}
server {
listen 80;
server_name localhost;
return 301 https://$host$request_uri;
...
}
server {
listen 443 ssl http2;
server_name localhost1;
ssl on;
ssl_certificate /usr/local/nginx/conf/server.crt;
ssl_certificate_key /usr/local/nginx/conf/server_nopwd.key;
location / {
proxy_pass http://project/;
}
}
...
}
Apache Tomcat 8.5+
Jetty
Netty
SpringBoot
SpringBoot可结合Jetty,Undertow。实现
HTTP/2 客户端实现
OkHttp
官网: https://github.com/square/okhttp
适用于Android和Java应用程序的HTTP和HTTP/2客户端。
使用
- 启用http/2支持
- 应用层协议协商(ALPN)是SSL协议的扩展,有助于更快速地建立HTTPS连接。它与HTTP / 2一起定义,HTTP / 2使用ALPN创建HTTPS连接。
- Java 7和Java 8中的当前实现不支持ALPN。
- Jetty项目为sun.security.ssl提供了一个ALPN支持的库。由于SSL实现是Java运行时的一部分,因此Jetty的ALPN JAR不能简单地放入CLASSPATH中,Java必须使用如下参数启动以覆盖Java的启动类路径。
-Xbootclasspath/p:<path-to-alpn-boot-VERSION.jar>
- OpenJDK版本和相应版本的ALPN对应关系。见表15.1 http://www.eclipse.org/jetty/documentation/current/alpn-chapter.html
- ALPN JAR的二进制版本下载地址。http://repo1.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/
测试http/2的一个例子(2015年)
使用一个TCP连接,测试http/2的多路复用。地址: https://github.com/fstab/http2-examples/tree/master/multiplexing-examples