HTTP 2.0 PK HTTP 1.X —— 速度与激情

2018 年 6 月 22 日 开源中国


准备发车,带你体验速度与激情,我们的热火瞬间点燃黑夜。

背景

目前提升H5应用加载速度的方式有很多,比如缓存、cdn加速、代码压缩合并和图片压缩等技术。这些方法相信大伙如数家珍,然而这些招用完后,是否还有优化空间呢?现在我们祭出大杀器——HTTP 2.0 


相信大家听说过HTTP 2.0,那么它和HTTP 1.X相比效果到底如何呢?请看疗效: 

单次页面加载速度对比

实践出真知,有请DEMO先生出场——一个网页,加载了8张图片,图片大小合计10MB


  • http 1.x:


DOMContentLoaded: 215ms,  Load: 549ms



  • http2.0:


DOMContentLoaded:156ms, Load:491ms



从数据中大家可以看到,对于这个DEMO页,HTTP 1.X需要花费549ms,而使用HTTP 2.0则可以减少60ms左右的等待。


Emmmm……才60ms,貌似没想像中改善那么大,60ms用户应该无感吧?


确实对单次用户访问来说,改善不大,但是用户浏览一个网站,不是一次就结束了,他会在接下来的时间里与网站产生多次互动。如果每个请求我们都能节省一点点时间,那么在用户的多次互动中,累加起来的时间应该比较可观了。

若是在大并发请求下,效果又当如何呢?上!压!测!


压测数据对比


模拟1,000,000 次请求压测数据如下:


http不同协议请求参数对比



从上表可以看到http2.0和http1.1相比,节省30s左右的时间,没有对比没有伤害。、(压测方法可见文末附录二)


网络表现不错,我们再来看看服务器资源消耗情况。


cpu 使用情况


我们将相关数据制成了图表,方便大家比对

 

us: 用户空间占用cpu时间
sy:系统空间占用cpu时间
hi: 硬盘中断

si: 软件中断


http1.1



cpu(us+sy)平均:82.51%


http2.0



cpu(us+sy)平均:63.09%


疗效相当不错,看官们是否动心了呢?接下来为你呈上运用之道。

 

http 协议发展




使用http2.0的必备条件


默认https支持http2.0(2015年提出)


浏览器支持ALPN
 

查看是否支持http2.0的三种方法


使用openssl测试


终端输入:echo | openssl s_client -alpn h2 –connect 域名:443



通过Chrome浏览器的属性查看


输入框键入 chrome://net-internals/#http2


 

通过Chrome的debug工具查看


protocol为h2


 

http1.1与http2.0的区别



报头压缩


通过h2load 命令访问



多路复用


  • http1.1


http1.1 without pipelining: 通过tcp连接上一个请求相应完后,下一个请求才能发出


http1.1 with pipelining: 通过tcp连接,上一个请求发出,下一个请求不需要等待,但是返回是同一顺序。


 

HTTP 1.X的网络加载情况,同一域名,最多支持6个Tcp连接,加载效果如同“正三角形”,看得我强迫症都犯了……

 

  • http2.0


在TCP连接上传输的是帧,客户端会将要传输的数据拆分为不同的帧,并标记对应的数据流ID,异步发出,服务端接收到帧集合根据数据流ID拼凑起来即为客户端发送来的数据。同理,服务端也是将数据拆分为不同帧返回。
 

每个请求通过tcp连接发出不需要等待其他请求返回, 所有的数据返回没有顺序。


 

HTTP 2.0的网络加载情况,同一时刻,可以发出30以上的数据帧且无序,感觉很舒服有没有??


我们不妨以货物运输来再现http1.1与http2.0的请求场景。


A地与C地之间相隔一条河流,货物运输需要途径桥梁。假定现有横跨A,C两地的6座桥梁(类似Chrome同一域名最大支持6个TCP通道),以其中一座双向路线桥梁b1为例,


http1.1的过程:


一辆运输车辆从A地出发,通过桥梁b1,到达C地,然而只有在该车辆从C地取货并返回后,另一辆车才能出发。如此有序往返...


http2.0的过程:


所有的车辆无序上桥,取货后返回,根据车辆牌照卸载对应取货物品。


显而易见,第二种方式,桥梁利用率高,车辆运输货物多。

 

请求优先级


http1.1 不支持请求优先级,在统一域名大量请求同时发送时,浏览器支持6个请求,由于没有优先级,加载的时候会出现javascript资源阻塞情况。


http2.0, 浏览器通过headers和priority携带优先级信息,服务器生成优先级树,指导资源的分配(内存,cpu时间,带宽)。

优先级最高:  主要的html
优先级高:   CSS文件
优先级中:   js文件

优先级低:   图片

 

服务端主动推送


http1.1:在访问页面时,浏览器识别html页面上的link链接,然后请求对应的资源,浏览器开始识别到请求需要一定时间。


http2.0: 在访问页面时,服务器主动推动资源下载,让浏览器直接请求link资源。


目前nginx1.13.9版本支持push功能

 

附录一: nginx安装配置http2.0


软件要求


nginx 版本1.9.5以上 nginx 下载页

openssl 1.0.2以上 openssl 下载页


安装过程



配置http2.0


listen   443 ssl http2;



附录二:压测


  • 压测工具


对于http,https使用apache 的ab


对于http/2使用nghttp2的h2load


  • 压测http



  • 压测http2.0


http2.0之压测



附录三:http协议

定义


Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议


组成


请求行+请求头+请求正文+返回头部+返回正文

 

请求行 


method Request-URI  Http Version

GET /index.html HTTP/1.1


请求头部



请求正文


请求是form表单数据或application/json 格式数据


返回头部



返回正文


服务端返回的结果

 

TCP握手


SYN---->SYN-ACK---->ACK

 

附录四: https协议

定义


https是一个在网络上改写的超文本安全通信传输协议。


在原有的TCP三次握手基础上,还有一次握手服务端下发ssl证书(所有者,域名公钥,数字签名,证书时间等),客户端验证证书。


证书


自签名证书或CA颁发


加密


对称加密和非对称加密

附录五:SPDY与ALPN

SPDY :是speedy的缩写,由Google开发实现,现已被弃用,它的目的是减少页面加载延迟,提高网站安全,主要是通过压缩,多路复用,优先级减少延迟。
 

ALPN:Application-Layer Protocol Negotiation, 它允许应用层商议在一个安全的连接上那种协议执行,为了避免循回绕行。


在与http2.0一起使用时,可以提高页面压缩率,减少网络延迟。


作者简介


就职于甜橙金融信息技术部,负责前端开发工作,先后任职携程,平安等公司的前端开发工程师职位,喜欢研究新的技术,服务于业务需求,熟练运用Linux/Unix系统命令,以终端为载体,快速执行操作。



推荐阅读

JPA、Hibernate、Spring Data JPA 之间的关系

遭微软放弃,Windows 7 终究活成了 XP 的样子

用 Python 分析4W场球赛,2018 世界杯冠军竟是......

从 Java 到 Kotlin,再从 Kotlin 回归 Java

“王者对战”之 MySQL 8 vs PostgreSQL 10

点击“阅读原文”查看更多精彩内容

登录查看更多
0

相关内容

多媒体系统(MS)期刊详细介绍了多媒体计算,通信,存储和应用的各个方面的创新研究思想,新兴技术,最新方法和工具。它包含理论,实验和调查文章。多媒体系统的覆盖范围包括:在计算机系统中集成数字视频和音频功能;多媒体信息编码和数据交换格式;数字多媒体的操作系统机制;数字视频和音频网络与通信;存储模型和结构;用于支持多媒体应用程序的方法、范式、工具和软件体系结构;多媒体应用程序和应用程序接口,以及多媒体终端系统架构。 官网地址:http://dblp.uni-trier.de/db/journals/mms/
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
Python导论,476页pdf,现代Python计算
专知会员服务
260+阅读 · 2020年5月17日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
阿里巴巴达摩院发布「2020十大科技趋势」
专知会员服务
106+阅读 · 2020年1月2日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
87+阅读 · 2019年11月25日
PyTorch 官方推荐了一份 60 分钟的深度学习指南
技术最前线
20+阅读 · 2019年10月17日
在K8S上运行Kafka合适吗?会遇到哪些陷阱?
DBAplus社群
9+阅读 · 2019年9月4日
7 款实用到哭的App,只说一遍
高效率工具搜罗
84+阅读 · 2019年4月30日
百度开源项目OpenRASP快速上手指南
黑客技术与网络安全
5+阅读 · 2019年2月12日
Android P正式发布,你需要尽快做适配了
前端之巅
3+阅读 · 2018年8月7日
刚开始学编程?这几款小工具能让你事半功倍
码农日常工具推荐
架构文摘
4+阅读 · 2017年9月26日
一招检验10大深度学习框架哪家强!
深度学习世界
3+阅读 · 2017年9月14日
OCR 哪家强?反正我觉得这个工具是厉害的不得了。
高效率工具搜罗
4+阅读 · 2017年7月3日
Real-time Scalable Dense Surfel Mapping
Arxiv
5+阅读 · 2019年9月10日
A General and Adaptive Robust Loss Function
Arxiv
8+阅读 · 2018年11月5日
Hierarchical Deep Multiagent Reinforcement Learning
Arxiv
8+阅读 · 2018年9月25日
VIP会员
相关VIP内容
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
Python导论,476页pdf,现代Python计算
专知会员服务
260+阅读 · 2020年5月17日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
阿里巴巴达摩院发布「2020十大科技趋势」
专知会员服务
106+阅读 · 2020年1月2日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
87+阅读 · 2019年11月25日
相关资讯
PyTorch 官方推荐了一份 60 分钟的深度学习指南
技术最前线
20+阅读 · 2019年10月17日
在K8S上运行Kafka合适吗?会遇到哪些陷阱?
DBAplus社群
9+阅读 · 2019年9月4日
7 款实用到哭的App,只说一遍
高效率工具搜罗
84+阅读 · 2019年4月30日
百度开源项目OpenRASP快速上手指南
黑客技术与网络安全
5+阅读 · 2019年2月12日
Android P正式发布,你需要尽快做适配了
前端之巅
3+阅读 · 2018年8月7日
刚开始学编程?这几款小工具能让你事半功倍
码农日常工具推荐
架构文摘
4+阅读 · 2017年9月26日
一招检验10大深度学习框架哪家强!
深度学习世界
3+阅读 · 2017年9月14日
OCR 哪家强?反正我觉得这个工具是厉害的不得了。
高效率工具搜罗
4+阅读 · 2017年7月3日
Top
微信扫码咨询专知VIP会员