HTTP/1 已死!
HTTP/1 所能做的 HTTP/2 都能做到,而且只会更快。
作者 | Philip Jones
译者 | 弯月
责编 | 屠敏
出品 | CSDN(ID:CSDNNews)
最近,HTTP/2 开始支持 WebSocket了(RFC 8441),如此说来 HTTP/2 已经实现了 HTTP/1 的所有功能。有了这个功能后,HTTP/1 所能做的一切 HTTP/2 都能做到,而且只会更快。这篇文章将为你介绍 HTTP/2 如何通过多路复用实现了更快的速度。
我们来考虑这样一种情况:一个非常复杂的拍卖网站。这是个单页应用,利用 WebSocket 链接获取当前的出价,因此每当用户选择想要参与的拍卖时,都会发送一系列的 API 请求。换句话说,用户可以通过 WebSocket 监视某个拍卖的进行情况,然后切换到另一个拍卖,这样就会触发 API 请求。由于数据的性质,显然应该都使用 HTTPS。
这个复杂的网站可以简化成利用一个 WebSocket 每隔一秒发送一次更新,同时允许在需要时调用大约20个API。这个简化版本位于这个代码库上(https://github.com/pgjones/http2_multiplexing_article),其中的页面由两个按钮组成,左边的打开 WebSocket 连接,右边的触发 20 个 API 调用。
HTTP/1.1 性能评测
HTTP/1.1 要求每个请求都有独立的连接(尽管一个请求结束后连接可以重用),从而导致多次连接的建立开销(其中包括 DNS、TCP 握手和 SSL 握手的开销)。此外,浏览器还会限制同时打开的连接数最多为六个,意味着在前六个连接结束之前,其他的请求只能阻塞。
HTTP/1.1 连接的时间线。所有请求完成需要142ms
HTTP/2
HTTP/2 改进了 HTTP/1.1,它支持多路复用和流水线,即一个连接现在可以并行服务所有请求。这就意味着连接建立的开销只有一次。此外,浏览器不必再阻塞任何请求,可以一次性全部发送,再等待服务器响应。
HTTP/2 连接的时间线。所有请求完成需要86ms
带有 WebSockets的HTTP/2
由 HTTP/2 自己完成所有请求就带来了 62ms 的巨大改进。但是,浏览器在建立连接阶段依然是阻塞的。从图 2 中可以看到,这个阶段花费了大约 10ms。
我们讨论的这个复杂的网站需要使用 WebSocket,这是个持久的连接。现在 WebSocket 可以通过 HTTP/2 实现,那么所有请求也可以复用这个连接,意味着不需要额外的开销去建立连接。
HTTP/2 请求使用已有 WebSocket 连接的时间线。所有请求完成需要69ms。
图 3 演示了这一点,没有任何阻塞,没有红色部分,也没有必要建立新的连接。像我们预期的那样,请求完成所需的时间更少,花费在建立连接上的时间也大致符合预期。
结论
HTTP/2 在本文讨论的这种非常复杂的网站上能带来巨大的效益,可以将整体时间降低到大约 50%。这可能会给用户体验带来巨大的提升,而额外的HTTP/2-WebSocket 功能也会带来微小但能感受到的提升。而且,网络连接的质量越差,建立连接的开销会变大,提升就越明显。
HTTP/2 对 WebSocket 的支持还非常新,RFC 是于 2018 年 9 月发布的,Firefox 65 到 2019 年 1 月末才支持,而 Chrome 的支持还在计划中。在服务器端,2019 年 1 月时 Hypercorn 是我能找到的支持 HTTP/2 WebSocket 的开源库。
有了 HTTP/2 的 WebSocket 支持后,就没有 HTTP/1.1 能做到而 HTTP/2做不到的事情了,而且 HTTP/2 要快很多。以后对 HTTP/2 的支持只会越来越多、越来越好,所以现在是时候切换了。
原文:https://medium.com/@pgjones/http-1-should-die-81b7588d617e
作者:Philip Jones,Octopus Wealth 的首席工程师,Quart、Hypercorn 和许多 Python HTTP 项目的维护者。
本文为 CSDN 翻译,如需转载,请注明来源出处。
热 文 推 荐
☞ 鏖战九载,Google 是否会因 Oracle 而弃用 Java?
☞Spring-Data-JPA尝鲜:快速搭建CRUD+分页后台实例
☞她说:是的,嫁人当嫁程序员!
print_r('点个好看吧!');
var_dump('点个好看吧!');
NSLog(@"点个好看吧!");
System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!n");
cout < < "点个好看吧!" < < endl;
Console.WriteLine("点个好看吧!");
fmt.Println("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!"

关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

随时掌握互联网精彩
- 1 植树就是植未来 7984562
- 2 海底捞10倍补偿小便事件4109单顾客 7998352
- 3 DeepSeek眼中不会被AI替代的职业 7835519
- 4 哪些行业人才火爆就业市场 7746939
- 5 女子离婚提5万家务补偿 法院判25万 7684128
- 6 实探大疆总部:21点楼下人头攒动 7592553
- 7 #金秀贤与未成年恋爱是恋童癖嘛# 7439747
- 8 陕西一医院被曝“偷换”新生儿 7346795
- 9 金秀贤过往黑历史被扒 7204463
- 10 S妈失眠严重半夜三点秒回信息 7153986