ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HTTP1.0,1.1,2.0,3.0 之间的差别

2022-02-04 21:33:24  阅读:154  来源: 互联网

标签:HTTP1.0 请求 传输 TCP header 3.0 HTTP2.0 连接 1.1


HTTP1.0

  • 只支持短连接 ,基于TCP 协议,使用的是TCP的短连接 (短连接 100张图则需要100次握手和100 次挥手),这样传输性能是很差的
  • 无host头域 , 在浏览器请求(如下图)中只有一个IP,这样不利于网站的发展,因为目前往往一个域名会被解析成多个IP, 而且一台主机可以搭建多个网站(虚拟主机) 只有一个IP则无法区别这些虚拟主机(多台主机共享一个IP)
  • 不允许断点续传 , 需要传输整个对象,不能只传输对象的一部分

1643969858932

1.1

  • 引入了更多的缓存策略
  • 在请求头部引入range头(为了允许断点续传功能)
  • 加入host头域(允许使用虚拟主机)
  • 长链接的支持(长连接 100张图 1次握手即可),支持了长链接和请求的流水线处理, 在TCP连接上可以传送多个HTTP请求(串行) 和响应, 减少了建立和关闭连接的消耗和延迟 , 在HTTP1.1中默认开启keep-alive , 这样缓解了每次连接时都要创建连接的性能消耗

串行带来的一个问题,一个包处理出现故障,则后续的数据包不能处理

2.0

  • 长连接 + IO多路复用模型

  • 新的二进制格式 HTTP1.x 的解析是基于文本. 基于文本格式存在一种缺陷, 文本的表现格式有多样性 , 要做到健壮性 , 考虑的场景有很多 二进制则不同, 只有0和1 的组合,实现了方便且健壮的特点
    多路复用 (连接共享,是基于长链接的) 一个连接上有多个request

  • HTTP2.0多路复用和HTTP1.1 中的长链接有什么区别

    • HTTP1.1 中多个请求 串行被处理, 后面的请求需要等待前面的请求处理完成才能被处理, 一旦有某个请求超时 ,则后续的只能被阻塞 (即对头阻塞)

    • HTTP2.0 多个请求可以同时在一个连接上并行执行. 若某个数据包请求超时,不影响其他连接的正常执行,但依然不能解决同一TCP层 下,前一个超时,后面数据包阻塞的问题(TCP层的对头阻塞)

    • header压缩 HTTP1.x中 header中信息数量较多,而且每次都要重复发送, HTTP2.0 使用encoder 来减少需要传输的header 大小 , 通讯双方各自cache一份 header fielder 表 , 既避免了header的重复传输 又减小了需要传输的大小 .

    • 服务端推送(server push) 同SPDY (Google 开发的基于TCP会话层协议,对HTTP协议的增强) 一样 , HTTP2.0 也具有server push功能

3.0

  • 基于Google的QUIC 协议
  • 解决了HTTP2.0中TCP层的对头阻塞
  • 优化了重传策略 , 重传包和原包的编码不同 , 降低后续重传策略的消耗
  • 连接迁移 不再用TCP四元组确定一个连接 而是用一个64 位的随机数确定连接
  • 提供更加合适的流量控制

标签:HTTP1.0,请求,传输,TCP,header,3.0,HTTP2.0,连接,1.1
来源: https://www.cnblogs.com/joeHelloWorld/p/15863444.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有