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提供了安全的通信保障,是现代互联网中广泛使用的安全通信协议。

相关推荐
dengjiayue3 小时前
tcp 的重传,流量控制,拥塞控制
网络协议·tcp/ip
Aileen_0v09 小时前
【AI驱动的数据结构:包装类的艺术与科学】
linux·数据结构·人工智能·笔记·网络协议·tcp/ip·whisper
花鱼白羊10 小时前
TCP Vegas拥塞控制算法——baseRtt 和 minRtt的区别
服务器·网络协议·tcp/ip
唐 城12 小时前
curl 放弃对 Hyper Rust HTTP 后端的支持
开发语言·http·rust
DevilHeart灬13 小时前
使用Grafana中按钮插件实现收发HTTP请求
http·grafana
总是学不会.17 小时前
第五篇:前后端如何“扯皮”——HTTP 在开发中的应用
java·网络·网络协议·http·开发
火狮18 小时前
鸿蒙Next API 12开发,使用@ohos/axios进行HTTP请求
http·华为·harmonyos
m0_7482382718 小时前
WebClient HTTP 请求问题处理模板(泛型响应、忽略 SSL 证书等)
网络协议·http·ssl
我曾经是个程序员18 小时前
鸿蒙学习记录之http网络请求
服务器·学习·http
୧⍢⃝୨ LonelyCoder19 小时前
FreePBX修改IP地址和端口以及添加SSL证书开启HTTPS访问
tcp/ip·https·ssl