前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HTTP/1.1存在的一些问题

HTTP/1.1存在的一些问题

作者头像
zy010101
发布2022-11-21 09:43:37
3810
发布2022-11-21 09:43:37
举报
文章被收录于专栏:程序员程序员程序员

HTTP1.1的现状

随着互联网的发展,http/1.0协议已经不能适应互联网的继续发展。人们在http/1.0的基础上进行了改进,设计了http/1.1协议。但是由于http在最初的时候被设计为一个相对简单直观的协议,但是时间证明了早期的设计是不尽人意的。(个人认为一开始HTTP协议不应该被设计为纯文本协议,虽然文本协议容易调试。这会导致其不够严谨,容易出错。这点在http/2的时候改为了二进制协议。)

HTTP1.1的问题

http/1.1最大的问题是规范太多并且包含了非常多的细枝末节,而且还有新的RFC文档可能更改了旧的RFC文档中的规范。http/1.1规范过多,导致的后果就是几乎没有任何实现支持http/1.1中所有的细节。因为对于人们而言,弄清楚“所有细节”都极度困难。现在的http/1.1基本都只是实现http/1.1的常用功能,对于不常用的功能不会实现。

最早对 HTTP/1.1 做出说明的 RFC 文档是 1997 年发布的 RFC2068。在 1999 年发布的 RFC2616 对 RFC2068 做了更新。当前关于 HTTP/1.1 最新的文档是 2014 年发布的 RFC7230、RFC7231、RFC7232、RFC7233、RFC7234、RFC7235

未被充分利用的TCP

http/1.1并没有充分利用TCP提供的性能。TCP协议是全双工的,允许数据在两个方向上同时传输,但是http/1.1的模式是一问一答。

pipeline

HTTP pipelining是把多个HTTP请求放到一个TCP连接中一一发送,而在发送过程中不需要等待服务器对前一个请求的响应;只不过,客户端还是要按照发送请求的顺序来接收响应。就像在超市收银台或者银行柜台排队时一样,你并不知道前面的顾客是干脆利索的还是会跟收银员/柜员磨蹭到世界末日。这就是所谓的线头阻塞(head-of-line blocking)。当然,你可以在选择队伍时候就做好功课,去排一个你认为最快的队伍,或者甚至另起一个新的队伍(译者注:即新建一个TCP连接)。但不管怎么样,你总归得先选择一个队伍,而且一旦选定之后,就不能更换队伍。但是,另起新队伍会导致资源耗费和性能损失。这种另起新队伍的方式只在新队伍数量很少的情况下有作用(因为TCP连接上限依旧存在),因此它并不具备可扩展性。

拼接

大型网站往往会包含大量的JavaScript文件。开发人员可以利用一些前端工具将这些文件合并为一个大的文件,从而让浏览器能只花费一个请求就将其下载完,而不是发无数请求去分别下载那些琐碎的JavaScript文件。但凡事往往有利有弊,如果某页面只需要其中一小部分代码,它也必须下载完整的那份;而文件中一个小小的改动也会造成大量数据的被重新下载。

分片

最初的HTTP 1.1规范提到一个客户端最多只能对同一主机建立两个TCP连接。因此,为了不和规范冲突,一些聪明的网站使用了新的主机名,这样的话,用户就能和网站建立更多的连接,从而降低载入时间。

后来,两个连接的限制被取消了,现在的客户端可以轻松地和每个主机建立6-8个连接。但由于连接的上限依然存在,所以网站还是会用这种技术来提升连接的数量。而随着资源个数的提升,网站会需要更多的连接来保证HTTP协议的效率,从而提升载入速度。在现今的网站上,使用50甚至100个连接来打开一个页面已经并不罕见。根据httparchive.org的最新记录显示,在Top 30万个URL中平均使用40个TCP连接来显示页面,而且这个数字仍然在缓慢的增长中。

参考资料

内容来源于:https://github.com/ye11ow/http2-explained-chinese

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • HTTP1.1的现状
  • HTTP1.1的问题
  • 未被充分利用的TCP
  • pipeline
  • 拼接
  • 分片
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档