HTTP1.1与HTTP1.0的区别

  • 长连接:HTTP/1.0 默认浏览器和服务器之间保持短暂连接,浏览器的每次请求都需要与服务器建立一个 TCP 连接,服务器完成后立即断开 TCP 连接。HTTP/1.1 默认使用的是持久连接,其支持在同一个 TCP 请求中传送多个 HTTP 请求和响应。此之前的 HTTP 版本的默认连接都是使用非持久连接,如果想要在旧版本的 HTTP 协议上维持持久连接,则需要指定 Connection 的首部字段的值为 Keep-Alive。
  • Host 请求头:早期 HTTP/1.0 中认为每台服务器都绑定一个唯一的 IP 地址并提供单一的服务,请求消息中的 URL 并没有传递主机名。而随着虚拟主机的出现,一台物理服务器上可以存在多个虚拟主机,并且它们共享同一个 IP 地址。为了支持虚拟主机,HTTP/1.1 中添加了 host 请求头,请求消息和响应消息中应声明这个字段,若请求消息中缺少该字段时服务端会响应一个 404 错误状态码。
  • 缓存处理:客户端会把第一次请求以及响应的数据保存在本地磁盘上,其中将请求的 URL 作为 key,而响应作为 value,两者 形成映射关系。 这样当后续发起相同的请求时,就可以先在本地磁盘上通过 key 查到对应的 value,也就是响应,如果找到了,就 直接从本地读取该响应。 在请求的 Etag 头部带上第一次请求的响应头部中的摘要 ,来判断过期的缓存是否发生了变化。
  • 减少重定向:将重定向的地址缓存到本地,见效网络请求次数。

    HTTP1.x与 HTTP2.0的区别

  • HTTP/2.0 头部压缩。HTTP/2.0 通过 HPACK 算法后再发送,同时通信双方会维护一张静态表,它是写入到 HTTP/2 框架里的,不会变化的。 高频出现在头部的字符串记录在这张表中,在每次 HTTP 传输时只需要传头字段在表中的索引即可,大大减小了重传次数和数据量。不在静态表范围内的头部字符串就要自行构建动态表。除了这两点外,还是用Huffman 编码压缩 数据,可达到 50%~90% 的高压缩率

  • 二进制传输。相比于 HTTP/1.X 的文本(字符串)传送, HTTP/2.0 采用二进制传送。客户端和服务器传输数据时把数据分成帧,一条 HTTP 响应,划分成了两个帧来传输(header frame、data frame),并且采用二进制来编码。 每条帧上有流标识符(Stream ID)用于标识属于哪个stream,帧组成了数据流,流具有流 ID 标识和优先级,通过优先级以及流依赖能够一定程度上解决关键请求被阻塞的问题。
  • HTTP/2.0 支持多路复用。因为流 ID 的存在,多个 Stream 复用一条 TCP 连接,达到并发的效果 。不同 Stream 的帧是可以乱序发送的(因此可以并发不同的 Stream ),因为每个帧的头部会 携带 Stream ID 信息,所以接收端可以通过 Stream ID 有序组装成 HTTP 消息,而同一 Stream 内部的帧必须是严 格有序的。 通过同一个 HTTP 请求可以实现多个HTTP 请求传输,客户端和服务器可以通过流 ID 来标识究竟是哪个流从而定位到是哪个 HTTP 请求。
  • HTTP/2.0 支持服务器推送。 服务器在客户端未经请求许可的情况下,可预先向客户端推送需要的内容,客户端在退出服务时可通过发送复位相关的请求来取消服务端的推送。

HTTP/3

  1. <br /> <br /> <br /> <br />