您的位置:首页 > 财经 > 金融 > http的发展历史,各版本的差异点,以及和https的区别

http的发展历史,各版本的差异点,以及和https的区别

2024/11/16 16:10:37 来源:https://blog.csdn.net/salmonwilliam/article/details/140971854  浏览:    关键词:http的发展历史,各版本的差异点,以及和https的区别

### HTTP的发展历史及各版本的差异点

HTTP/0.9

- **发布时间**:1991年
- **特点**:
  - 最初的HTTP协议版本,非常简单。
  - 只支持GET方法,不支持请求头和响应头。
  - 响应仅为纯文本,无法传输图片、音频等多媒体资源。
  - 通过TCP连接请求一个资源后立即关闭连接。

 HTTP/1.0

- **发布时间**:1996年(RFC 1945)
- **特点**:
  - 支持更多的请求方法,如POST、HEAD等。
  - 引入了HTTP头部,支持传输更多的元数据。
  - 支持多种内容类型,通过`Content-Type`头部进行标识。
  - 每次请求/响应都会建立和关闭一个TCP连接,效率较低。

 HTTP/1.1

- **发布时间**:1997年(RFC 2068),1999年更新(RFC 2616),2014年进一步更新(RFC 7230-7235)
- **特点**:
  - 连接复用(Persistent Connection):默认使用持久连接(Keep-Alive),在同一个TCP连接上可以进行多个请求和响应,减少了连接的开销。
  - 支持管道化(Pipelining):允许在一个连接中同时发送多个请求,尽管响应仍然按顺序返回。
  - 增加了许多新的头部字段,如`Host`、`If-Modified-Since`、`Range`等,支持更丰富的功能。
  - 增强了缓存机制,支持分块传输编码(Chunked Transfer Encoding),可以逐步传输响应内容。
  - 支持内容协商(Content Negotiation),客户端和服务器可以就内容的格式进行协商。

连接复用(Persistent Connections)

在HTTP/1.0中,每次请求/响应都需要建立一个TCP连接,这种方式效率较低。在HTTP/1.1中,引入了连接复用(也叫持久连接)的概念,默认启用了持久连接,即一个TCP连接可以用于多个请求和响应,不需要每次都重新建立和关闭连接。持久连接通过在头部字段中加入Connection: keep-alive来实现。

意义
  • 减少延迟:复用连接减少了频繁建立和关闭TCP连接的开销,从而降低了延迟。
  • 节省资源:减少了服务器和客户端资源的消耗,因为建立和关闭连接需要额外的计算资源和网络资源。

管道化(Pipelining)

概念

管道化是HTTP/1.1的一个特性,允许客户端在同一个TCP连接上发送多个HTTP请求,而不必等待前一个请求的响应到达后再发送下一个请求。

实现和问题
  • 实现:客户端可以在第一个请求的响应返回之前,继续发送后续的请求。服务器按照请求的顺序依次处理并返回响应。
  • 问题:虽然管道化可以提高效率,但如果前面的请求处理时间较长,后面的请求会被阻塞,出现队头阻塞(Head-of-line blocking)问题。由于这个原因,管道化并未得到广泛使用和支持。

HTTP/2

- **发布时间**:2015年(RFC 7540)
- **特点**:
  - 二进制分帧层:HTTP/2将HTTP消息分割成更小的帧,并在传输层进行二进制编码,而不是HTTP/1.x的纯文本格式。
  - 多路复用(Multiplexing):在一个TCP连接上同时发送多个请求和响应,消除了HTTP/1.x中的队头阻塞问题。
  - 头部压缩(Header Compression):使用HPACK算法对头部进行压缩,减少了头部数据的传输开销。
  - 服务器推送(Server Push):服务器可以在客户端请求之前推送资源,从而提高性能。
  - 流量优先级(Stream Prioritization):客户端可以为请求设置优先级,服务器可以根据优先级进行资源分配。

HTTP/2中的多路复用(Multiplexing)

概念

多路复用是HTTP/2中的一个核心特性,它通过在一个TCP连接上同时处理多个请求和响应,彻底解决了HTTP/1.1中的队头阻塞问题。

实现
  • 二进制分帧:HTTP/2将HTTP消息分割成更小的帧(Frame),并在传输层进行二进制编码,而不是HTTP/1.x的纯文本格式。
  • :每个请求/响应对被分配一个唯一的流(Stream ID)。多个流可以在同一个TCP连接上并行传输,不需要按顺序处理。
  • 优先级:每个流可以有优先级,服务器可以根据优先级分配资源。
优点
  • 消除队头阻塞:多路复用允许在同一个连接上并行处理多个请求和响应,不受前一个请求的处理时间影响。
  • 提高传输效率:二进制分帧和头部压缩(HPACK算法)进一步减少了数据传输的开销。

http1.1里管道化与多路复用的区别

  1. 顺序处理 vs 并行处理

    • 管道化:在同一个TCP连接上顺序发送多个请求,但响应也必须按顺序返回。如果某个请求处理时间长,后续请求会被阻塞。
    • 多路复用:在同一个TCP连接上并行处理多个请求和响应,不受顺序影响,消除了队头阻塞问题。
  2. 实现方式

    • 管道化:基于HTTP/1.1的文本协议,要求客户端按照顺序发送请求,服务器按顺序返回响应。
    • 多路复用:基于HTTP/2的二进制协议,通过流ID标识请求和响应,允许在一个连接上同时处理多个流。
  3. 性能

    • 管道化:提升有限,受队头阻塞影响较大。
    • 多路复用:显著提升,消除队头阻塞,并且通过二进制分帧和头部压缩提高了传输效率。

综述

  • 连接复用:HTTP/1.1中引入,通过持久连接减少频繁建立和关闭TCP连接的开销。
  • 管道化:HTTP/1.1中的特性,允许顺序发送多个请求,但受队头阻塞影响。
  • 多路复用:HTTP/2中的核心特性,通过二进制分帧和流的概念,在同一个TCP连接上并行处理多个请求和响应,彻底解决队头阻塞问题,提高了传输效率和性能。

 

HTTP/3

- **发布时间**:2020年(草案阶段,IETF QUIC工作组)
- **特点**:
  - 基于QUIC协议:HTTP/3运行在QUIC协议之上,而不是传统的TCP协议。QUIC是一种基于UDP的传输层协议,提供更快的连接建立和恢复。
  - 改进的多路复用:在HTTP/2的多路复用基础上进一步优化,消除了TCP中的队头阻塞问题。
  - 更低的延迟:通过更快速的握手过程和连接迁移功能,提高了传输效率和可靠性。
  - 集成了TLS 1.3:内置加密,简化了安全连接的建立过程。

HTTP和HTTPS的区别

协议层次


  - **HTTP**:运行在TCP协议之上,默认端口是80
  - **HTTPS**:运行在SSL/TLS协议之上,再在其上运行HTTP,默认端口是443

安全性


  - **HTTP**:数据以明文形式传输,存在被窃听、篡改和伪装的风险。
  - **HTTPS**:通过SSL/TLS对数据进行加密传输,确保数据的保密性、完整性和真实性。

性能


  - **HTTP**:不进行加密和解密处理,性能开销较小。
  - **HTTPS**:由于加密和解密操作,性能开销较大,但通过硬件加速和协议优化,可以减小性能影响。

使用场景


  - **HTTP**:适用于对安全性要求不高的场景,如公共信息的查询、静态资源的加载等。
  - **HTTPS**:适用于对安全性要求较高的场景,如登录认证、在线支付、敏感数据传输等。

综述

- **HTTP/0.9**到**HTTP/3**:随着版本的升级,HTTP协议在功能、性能、安全性等方面得到了显著提升。
- **HTTPS**:在HTTP的基础上通过SSL/TLS提供了安全的通信保障,是现代互联网中广泛使用的安全通信协议。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com