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

HTTP1.0

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

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

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 位的随机数确定连接
  • 提供更加合适的流量控制
上一篇:计算机网络 第三章 传输层


下一篇:计算机网络再次整理————tcp例子第二前奏[四]