http1、http1.1、http2

2023-12-25 11:47:25

http(HyperText Transfer Protocol),是超文本传输协议,是目前互联网上运用最广泛的一种网络协议,所有的www文件必须遵守该协议。(属于应用层协议)

http的工作流程

  • 浏览器与服务器建立TCP连接,即三次握手
  • TCP连接成功,浏览器发出http请求命令
  • 服务器接受请求并返回http响应
  • 服务器关闭连接,即四次挥手
  • 浏览器解析请求的资源

HTTP报文

分为请求和响应报文

http1.0

特点:

  • 每次请求都必须新建一次连接,必须通过TCP的三次握手才能开始传输数据,然后四次挥手结束连接。
  • 不跟踪每个浏览器的历史请求

缺点:

  • 每次都得建立TCP连接,费时费力
  • 队头阻塞,下一个请求必须在前一个请求响应到达后发送。如果某请求一直不到达,那么下一个请求就一直不发送。

http1.1

http1.1中默认支持长连接,即在一个TCP连接上可以传输多个http请求和响应,减少了建立和关闭连接的消耗和延迟。

特点:

  • 支持长连接,通过Keep-Alive保持http连接不断开,避免重复建立TCP连接
  • 管道化,通过长连接实现在一个连接中传输多个文件
  • 加入cache-control缓存处理
  • 增加了Host字段
  • 添加了put、delete、options等其他请求方法
  • 支持断点续传

改进和优化

  • http管道化:是指将多个http请求整批提交给服务器的技术,虽然可以整批发送请求,但是服务器依然需要根据请求顺序来回复浏览器的请求。
  • 对动态生成的内容提供了更好的支持:http1.0中,需要在响应头中设置完整的数据大小,浏览器根据设置的数据大小来接受数据。http1.1中引入了chunk transfer机制,服务器将数据分隔为若干个任意大小的数据块,每个数据块发送是附上上个数据块的长度,最后一个0长度的块作为发送数据完成的标志
  • 浏览器为每个域名同时维护6个TCP持久连接,但是这些连接会竞争带宽。

缺点:

  • 队头阻塞
  • 无状态特性,协议对于连接状态没有记忆能力
  • 不安全性 传输内容没有加密
  • 不支持服务端推送

http2

特性:

  • 二进制传输:将请求和 响应数据分为更小的帧,采用二进制编码
  • 多路复用: 同一个域名下所有通信都是在单个连接上完成,单个连接可以承载任意数量的双休数据流,数据流以消息形式发送,而消息由一个或多个帧发送
  • 支持服务器端推送,服务端可以主动向客户端发送消息,提前推送客户端需要的静态资源
  • 提供安全性,http2也是明文的,只不过格式是二进制的,但http2都是https协议的,跑在TSL上面

http2仍然存在问题,TCP+TSL建立连接的时间是主要瓶颈,没从根本上解决队头阻塞问题,如果遇到丢包,tcp协议还是会重新发送数据。http2中多个请求跑在一个TCP管道中,如果其中任意一路数据流出现丢包,就会阻塞tcp连接中的所有请求。

http3

http3甩掉TCP、TSL的包袱,构建高效网络QUIC协议

HTTP3选择了UDP协议,基于UDP实现了类似TCP的多路数据流、传输可靠性等功能,将这套功能称为QUIC协议。

?特性:

  • 基于UDP协议改造,实现了快速握手
  • 集成了TLS的加密功能
  • 多路复用,彻底解决了头阻塞问题(一个物理连接上可以有多个独立的逻辑数据流,实现了数据流的单独传输)
  • 实现了类似TCP的流量控制、传输可靠性的功能

队头阻塞是指:当顺序发送的请求序列中的一个请求因为某种原因阻塞时,在后面排队的请求也一并阻塞,导致客户端收不到数据。

解决队头阻塞:

  1. 将同一页面的资源分散到不同域名下,提示连接上限。
  2. spriting合并多张小图为一张大图,再用JavaScript或css将小图重新分割
  3. 内联,将图片的原始数据嵌入在css文件里面的url里来减少网络请求次数

总结

http1.0

浏览器与服务器只保持短暂的链接,浏览器每次请求都需要与服务器建立一个TCP连接

http1.1

  • 引入了持久连接,tcp不关闭,多个请求复用同一个TCP连接
  • 多个请求按次序在服务端被处理
  • 新增了一些请求方法、请求头和响应头

http2.0

  • 采用了二进制而非文本字符串格式
  • 多路复用,只需要建立一个连接即可实现并行
  • 使用爆头压缩,降低开销
  • 服务器推送

HTTP3.0

  • QUIC 基于 UDP 实现,是 HTTP/3 中的底层支撑协议,该协议基于 UDP,又取了 TCP 中的精华,实现了即快又可靠的协议。

文章来源:https://blog.csdn.net/content6/article/details/135192178
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。