-
HTTP/1.0:
- 使用短连接(non-persistent connections):每个请求/响应都需要建立一个新的TCP连接。
- 缓存控制使用 expires / last-modified/if-modified-since
- http1.0手动配置 Connection:Keep-Alive 也可以使用长连接
- 支持的方法有 get、head、post 【简单请求的方法】
- 什么是简单请求?请看这篇文章
- 有队头阻塞问题,所以浏览器会限制同一个连接的同时请求数,Chrome 是限制6个
-
HTTP/1.1:
- 默认使用持久连接(persistent connections):同一连接可以被多个请求重复使用,减少了连接建立和断开的开销,
- 长连接使用 http 响应/请求头部 Connection:Keep-Alive 控制长连接,http1.1 默认开启长连接
- 在连接空闲大约300后会自动断开 tcp 长连接,否则会浪费资源
- 客户端主动断开连接:请求头设置Connection:close
- 服务端主动断开连接:返回的响应没有 Connection:Keep-Alive 了,此连接就会断开
- 有队头阻塞问题
- 缓存控制使用 cache-control / ETag/ if-none-match
- 引入 Hos t头部字段,使得一个物理服务器可以承载多个虚拟主机。
- 新增了请求方法 put、delete、options
- 有队头阻塞问题,所以浏览器会限制同一个连接的同时请求数,Chrome 是限制6个
-
HTTP/2:
- 二进制协议:头部信息和数据都以二进制格式传输,减少了传输时的开销。
- 多路复用(multiplexing):在一个连接上同时发送多个请求和响应,提高了并发性能。解决了队头阻塞问题
- 同域名下所有通信都在单个连接上完成,同个域名只需要占用一个 TCP 连接,使用一个连接并行发送多个请求和响应。
- 头部压缩:使用HPACK算法对头部信息进行压缩,减少了传输的数据量。
- 服务器推送(server push):服务器可以预测客户端需要的资源并在响应中主动推送。
- 因为解决了队头阻塞问题,所以浏览器的同时请求数限制几乎没有
-
HTTP/3:
- 使用QUIC(Quick UDP Internet Connections)协议,使用UDP,而不是TCP协议,以减少连接建立的延迟。
- 多路复用(multiplexing)和头部压缩等特性继承自 HTTP/2。
- 支持快速连接迁移:在网络切换时,可以更快地迁移连接。
- 具有更好的流量控制和错误恢复机制。
- http3 已经成为正式的标准,有些服务商已经可以使用了。
- https:
- 加密传输,需要身份认证,使用证书的公钥和自己的私钥建立 tls 连接
- 基于 ssl/tls 安全传输层协议之上
- 默认端口是 443,http 默认端口是80
首先说几个重点
(1)我们最常用的http请求是 http1.1 和 http2
(2)如何使用 http2 或者 http3,这个不是我们前端的任务,是服务端的配置任务,比如你用的阿里云服务器,那就需要去阿里云那边配置,如果你用 nginx,那也需要使用nginx配置
(3)chrome 浏览器的最大连接数为6是针对 http1 的,因为 http1 有队头阻塞问题。