HTTP/1.0、HTTP/1.1、HTTP/2.0区别

区别

特性 HTTP/1.0 HTTP/1.1 HTTP/2.0
连接管理 非持久连接:每个请求/响应需要新的连接 默认持久连接:允许多个请求/响应通过单个连接 多路复用(Multiplexing),允许单个连接上并行处理多个请求/响应
请求流水线 不支持 支持(但受限于阻塞问题) 不支持,由多路复用取代
性能 较低,由于连接建立和关闭的开销 较高,由于持久连接和管道化(Pipelining) 最高,由于多路复用、头部压缩和服务器推送
缓存 If-Modified-Since、Expires 来做为缓存判断的标准 增强了缓存控制,引入了ETag、If-None-Match等 增强了缓存策略,更好地支持HTTP/2.0的特性和功能
头信息压缩 不支持 不支持 支持,使用HPACK算法进行头部压缩
服务器推送 不支持 不支持 支持服务器主动推送资源到客户端缓存
安全性 无原生安全支持 无原生安全支持,但常通过HTTPS扩展实现 原生支持通过TLS加密的HTTPS
二进制分帧 不支持 不支持 支持,所有通信都被分解为小的消息和帧,能更有效地使用网络资源
消息依赖性 请求/响应是严格有序的 请求/响应是严格有序的 请求/响应可以并行处理,不依赖于之前的请求/响应
流控制 不支持 不支持 支持流控制,允许客户端和服务器更好地控制资源消耗和分配

HTTP/1.0

浅谈 HTTP


HTTP/1.1

HTTP/1.1是HTTP协议的一个版本,相较于HTTP/1.0,它在多个方面进行了改进和优化。

1. 持久连接(长连接)

HTTP/1.0中,每个HTTP请求都需要建立一个新的TCP连接,完成后立即断开。这种方式在大量请求时会造成很大的性能开销,因为每个连接都需要进行三次握手和四次挥手。

HTTP/1.1引入了持久连接(也称为长连接)的概念。通过在请求头中添加Connection: keep-alive字段,客户端和服务器之间可以保持一个TCP连接,用于多个请求和响应的传输 。这种方式显著减少了建立和关闭连接的次数,提高了网络资源的利用率和性能。

.

2. 管道化

管道化:客户端可以在一个持久的TCP连接上连续发送多个请求,而不需要等待上一个请求的响应,且服务器会按照请求的顺序依次返回响应。

管道网络传输是指:**可以在同一个 TCP 连接里面,客户端可以发起多个请求,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。**但是服务器还是按照顺序回应请求。如果前面的回应特别慢,后面就会有许多请求排队等着。这称为队头堵塞。

注意:

  • 管道化同时依赖于客户端和服务器的支持。只有遵守HTTP/1.1的服务器才支持管道化。

  • 虽然管道化可以提高性能,但它也可能引发“队首阻塞”问题。

    如果前面的一个请求在服务器端处理的时间很长,生成响应需要很多时间,那么后面的请求即使已经处理完毕并生成了响应,也需要等待前面的响应发送完毕后才能发送。这会造成一定的延迟。

    HTTP/2通过引入二进制帧和多路复用的概念,以及服务器推送等功能,进一步解决了HTTP/1.1中的队首阻塞问题,并提供了更好的性能和用户体验。

.

3. Host头字段

HTTP/1.0中,由于无法确定请求的资源位于哪个主机上,因此无法实现虚拟主机。

HTTP/1.1在请求头中引入了Host字段,用于指定请求的资源所在的主机和端口号。Host 请求头字段是一个强制性的字段。

这使得一台物理服务器上可以部署多个Web站点,通过Host字段来区分不同的虚拟主机。对于支持虚拟主机(即一台服务器上托管多个域名)也至关重要。

.

4. 分块传输编码

分块传输编码:当服务器不知道响应内容的长度时,可以使用分块传输编码将响应内容分成多个块进行传输。每个块都包含一个长度字段和一个数据字段。客户端可以逐个接收这些块,直到接收到一个长度为0的块时,表示响应内容已经传输完毕。

分块传输编码允许服务器在传输过程中动态生成响应内容,而不需要提前知道整个响应的大小。这有助于处理大文件传输和动态内容生成等场景。

.

5. 缓存机制

HTTP/1.1引入了更强大的缓存机制,允许客户端和服务器缓存请求和响应的内容。通过缓存,可以减少网络传输的数据量,提高响应速度。

HTTP/1.1还提供了丰富的缓存控制指令,如Cache-ControlExpiresETag等,用于控制缓存的行为和有效性。

彻底理解浏览器的缓存机制

.

6. 请求方法

HTTP/1.1新增了以下五种请求方法:

  • OPTIONS:这个请求方法用于获取目标资源所支持的通信选项。客户端可以对特定的URL使用OPTIONS请求,以了解该URL所支持的HTTP方法。

  • PUT:PUT请求方法用于向指定资源位置上传其最新内容。通常用于更新资源。

  • DELETE:DELETE请求方法用于删除指定资源。

  • TRACE:TRACE请求方法用于回显服务器收到的请求,主要用于测试或诊断目的。

  • CONNECT:CONNECT请求方法通常用于SSL加密服务器的链接(经由非加密的HTTP代理)。这个请求方法允许客户端建立一个到由请求URI标识的资源的隧道。一旦隧道建立,客户端就可以通过隧道发送原始的字节数据,而无需考虑HTTP协议。


HTTP/2.0

1. 二进制分帧

HTTP/2 是一个二进制协议。在 HTTP/1.1 版中,报文的头信息必须是文本(ASCII 编码),数据体可以是文本,也可以是二进制。HTTP/2 则是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为"帧",可以分为头信息帧和数据帧。 帧的概念是它实现多路复用的基础。

HTTP/2.0将HTTP报文分为多个帧(Frame),以二进制方式传输,取代了HTTP 1.x中的文本格式。这使得HTTP/2.0在解析数据时更加高效,减少了处理文本数据的开销。

每个帧都包含帧的长度、类型、标志等信息,以及特定类型的数据,如HTTP首部、负荷等。这种分帧机制使得HTTP/2.0能够更灵活地处理数据,提高了传输效率。

.

2. 多路复用

多路复用:允许在同一个TCP连接上同时发送多个请求和响应,而且不用按照顺序一一发送。这解决了HTTP/1.1中的队头阻塞问题,提高了并发性能。

通过多路复用,客户端和服务器可以并行处理多个请求和响应,从而减少了等待时间,提高了网络资源的利用率。

.

3. 服务器推送

HTTP/2 允许服务器未经请求,主动向客户端发送资源,这叫做服务器推送。使用服务器推送提前给客户端推送必要的资源,这样就可以相对缩短页面加载时间。

服务器推送可以减少客户端的额外请求,降低网络延迟,提高页面加载速度。

.

4. 优先级设置

HTTP/2.0支持数据流的优先级设置,允许客户端指定请求的优先级。

服务器会根据请求的优先级来分配资源,优先处理重要的请求,从而提高了用户体验。

.

5. 头信息压缩

由于 HTTP 1.1 协议不带状态,每次请求都必须附上所有信息。所以,请求的很多字段都是重复的,比如 CookieUser Agent ,一模一样的内容,每次请求都必须附带,这会浪费很多带宽,也影响速度。

HTTP/2.0使用HPACK算法对头信息压缩进行压缩,减少了头信息压缩的数据量,节省了带宽

  • 头信息使用 gzip 或 compress 压缩后再发送

  • 客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就能提高速度了。

.

6. 安全性

HTTP/2.0默认使用SSL/TLS加密传输网络数据,增强了安全性。

这使得HTTP/2.0更加适用于敏感数据的传输,如在线支付、登录等场景。

.

7. 流量控制

HTTP/2.0引入了流量控制机制,允许客户端和服务器控制数据的传输速度。

这可以防止发送方发送过多的数据导致接收方缓冲区溢出,从而保证了数据传输的稳定性和可靠性。

相关推荐

  1. <span style='color:red;'>11</span>_<span style='color:red;'>Http</span>

    11_Http

    2024-05-11 08:28:11      45 阅读
  2. httphttps区别

    2024-05-11 08:28:11       60 阅读
  3. httphttps区别

    2024-05-11 08:28:11       56 阅读
  4. httpshttp区别

    2024-05-11 08:28:11       25 阅读
  5. HTTPHTTPS区别

    2024-05-11 08:28:11       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-11 08:28:11       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-11 08:28:11       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-11 08:28:11       87 阅读
  4. Python语言-面向对象

    2024-05-11 08:28:11       96 阅读

热门阅读

  1. AI学习指南概率论篇-概率分布

    2024-05-11 08:28:11       33 阅读
  2. 超级好用的C++实用库之动态库加载器

    2024-05-11 08:28:11       29 阅读
  3. axios常用配置

    2024-05-11 08:28:11       33 阅读
  4. npm详解

    2024-05-11 08:28:11       28 阅读
  5. 【服务治理中间件】consul介绍和基本原理

    2024-05-11 08:28:11       33 阅读
  6. Express中间件(完善)

    2024-05-11 08:28:11       32 阅读
  7. VUE----数字增加,兼容小程序

    2024-05-11 08:28:11       31 阅读