1 HTTP协议协商
1.1 NPN
NPN:Next Protocol Negotiation,是由Google公司开发的用于SPDY进行协议协商扩展。
协商过程:
- 服务端在收到客户端的client hello后,把自己支持的协议通过Server Hello
发送给客户端 - 客户端拿到清单后,选择一个协议在Change Cipher Spec 之后加密发送给服务端
1.2 ALPN
ALPN:Application Layer Protocol Negotiation,是IETF制定的在HTTP/2.0中使用的协议协商扩展
协商过程:
- 客户端把自己支持的清单通过client hello发送给服务端
- 服务端在选择一个协议后通过server hello告诉客户端应该使用哪个协议(会比NPN少一步数据交换)
1.3 说明
- 最新的chrome和firefox已经不支持NPN
- 要支持ALPN须将openssl升级至1.0.2版本
- Java中要使用okhttp+openjdk+alpn-boot才能访问http2:JVM启动参数 -Xbootclasspath/p:./alpn-boot-8.1.9.v20160720.jar
2 性能简单测试
目前国内大多数网站还不支持http/2,http/2还没有大规模的使用起来,相关客户端和组件还不完善,还存在一些问题,只做了简单的一个测试:
-
5000次访问数据、单线程、异步方式
http:5条长连接 1568ms
https:5条长连接 2284ms
http2:1条连接 2083ms
-
5000次访问数据、单线程、异步方式
http:5条长连接 1478ms
https:5条长连接 2057ms
http2:5条连接 2008ms
-
5000次访问数据、单线程、同步方式
http:1条长连接 1992ms
https:1条长连接 2884ms
http2:1条连接 2879ms
-
5000次访问数据、多线程、异步方式
http:5条长连接 1474ms
https:5条长连接 1956ms
Http2:5条连接 2041ms
-
5000次访问数据、多线程、同步方式
http:5条长连接 1053ms
https:5条长连接 1578ms
http2:5条连接 1742ms