当前位置: 首页 > news >正文

HTTP(超文本传输协议)全面总结

HTTP(HyperText Transfer Protocol,超文本传输协议)是万维网(World Wide Web)应用中的基础协议,用于客户端与服务器之间的数据传输。随着互联网技术的发展,HTTP协议也经历了多个版本的更新,每个版本的改进都旨在提升性能、安全性和灵活性。以下是HTTP各版本的特点、优缺点以及HTTP发展趋势。

一、HTTP/1.0

HTTP/1.0 是 HTTP 协议的第一个版本,首次在 1996 年发布,成为万维网(WWW)的一部分。它是现代互联网协议栈中的基础之一,但在早期的互联网通信中,HTTP/1.0 扮演了重要的角色。

1.HTTP/1.0的特点

(1)无状态协议

HTTP 是一种“无状态”协议,这意味着每次请求和响应之间没有任何联系。每个请求都是独立的,服务器不会保留任何关于客户端的状态信息。

(2)无持久连接

在 HTTP/1.0 中,每个 HTTP 请求都需要建立一个新的 TCP 连接。请求完成后,这个连接会被关闭。这意味着每个请求都需要进行一次新的三次握手,增加了延迟和带宽的开销;每次访问网页中的多个资源(如图片、CSS、JavaScript 等),浏览器必须重新与服务器建立连接。

(3)请求格式简单

HTTP/1.0 的请求格式简单,包括请求行、请求头和请求体。请求头通常包含信息,如浏览器类型、语言、接受的内容类型等。

2.HTTP/1.0的请求结构

(1)请求行

包括方法(如 GET、POST)、URL 和 HTTP 版本(如 HTTP/1.0)。

示例:

GET /index.html HTTP/1.0

(2)请求头

包括客户端环境的详细信息,例如浏览器类型、语言、可接受的内容类型等。

示例:

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36

(3)请求体(可选)

用于 POST 请求时,包含发送到服务器的数据,如表单数据。

3.HTTP/1.0的响应结构

(1)响应行

包括 HTTP 版本、状态码和状态描述。

示例:

HTTP/1.0 200 OK

(2)响应头

描述服务器、内容类型、日期等信息。

示例:

Content-Type: text/html; charset=UTF-8

(3)响应体

服务器返回的内容(如 HTML 页面、图像、JSON 数据等)。

4.HTTP/1.0的其他特性

(1)支持不同的请求方法

HTTP/1.0 引入了几种常见的请求方法:

HEAD:请求指定资源的头部信息。

GET:请求指定的资源。

POST:提交数据给服务器。

PUT:用于上传文件或数据。

DELETE:删除指定的资源。

(2)状态码

HTTP/1.0 使用了三位数字的状态码来指示请求的处理状态。

最常见的状态码包括:

200 OK:请求成功。

404 Not Found:资源未找到。

301 Moved Permanently:资源已永久移动。

5.HTTP/1.0的优点

(1)简单易理解

HTTP/1.0 协议非常简单,对于开发者来说非常容易理解和实现,特别是在早期互联网应用中,它作为一个轻量级的协议非常适用。

(2)兼容性强

在 1990s 年代,HTTP/1.0 非常适合当时的硬件和网络条件,具有很高的兼容性。

6.HTTP/1.0的缺点

(1)无状态、无持久连接

由于连接在每次请求后都会关闭,这意味着浏览器必须在每次请求时都重新与服务器建立连接,造成了额外的开销。

(2)性能低

由于每个请求都需要进行新的 TCP 握手,多个请求会占用较多带宽和延迟。建立和关闭连接的过程需要时间和计算资源,尤其是在页面包含多个资源时(例如图片、CSS 文件、JavaScript 文件等),延迟较高。

二、HTTP1.1

HTTP/1.1 是 HTTP 协议的第二个版本,首次在 1999 年发布(RFC 2616)。它在 HTTP/1.0 的基础上进行了许多改进,尤其在性能、效率和扩展性方面。HTTP/1.1 成为了 Web 服务和浏览器通信的主流协议,直到今天,虽然 HTTP/2 和 HTTP/3 已经开始普及,但 HTTP/1.1 仍然在很多系统中被广泛使用。

1.HTTP/1.1的特点

(1)持久连接

在 HTTP/1.1 中,默认启用了持久连接(也称为长连接)。这意味着客户端和服务器之间的 TCP 连接在一次请求响应周期结束后不会立即关闭,而是保持开放状态,允许进行多个请求和响应,从而减少了频繁建立连接的开销。

(2)管道化

HTTP/1.1 支持管道化(但浏览器的支持较差),即客户端可以在接收到响应之前发送多个请求。这样,客户端可以提前发送请求,而不需要等待前一个请求的响应完成。这减少了请求延迟,但服务器必须按顺序返回响应

(3)更强的缓存支持

HTTP/1.1 对缓存机制进行了增强,增加了多个缓存控制头,如 Cache-Control,允许更精确地控制缓存策略。这让浏览器和中间代理服务器能更好地缓存资源,提高访问速度。

(4)支持分块传输编码

在 HTTP/1.1 中,响应体可以采用分块传输编码。这种编码方式允许服务器在不知道内容长度的情况下逐步发送响应体,尤其适合流媒体数据或动态生成的内容。

(5)支持虚拟主机

HTTP/1.1 增强了对虚拟主机的支持。在 HTTP/1.0 中,每个 IP 地址只能绑定一个网站,而 HTTP/1.1 允许通过 Host 头部字段在同一个 IP 地址上承载多个域名。这为多租户托管服务(如共享主机)提供了技术支持。

2.HTTP/1.1的请求格式

HTTP/1.1 的请求和响应结构与1.0类似,但增加了更多的头部字段和特性。

(1)请求行

包括方法、URL 和 HTTP。

示例:

GET /index.html HTTP/1.1

(2)请求头

包含有关客户端和请求的信息,例如 Host、Connection、Accept-Encoding 等。

示例:

Host: www.example.com

(3)请求体(可选)

用于发送数据,通常用于 POST 或 PUT 请求。

3.HTTP/1.1的响应格式

(1)响应行

包含 HTTP 版本、状态码和状态描述。

示例:

HTTP/1.1 200 OK

(2)响应头

包括服务器信息、内容类型、日期、缓存控制等信息。

示例:

Content-Type: text/html; charset=UTF-8

(3)响应体

包含服务器返回的内容。

4.HTTP/1.1的主要新特性

(1)Host 头部

HTTP/1.1 引入了 Host 头部字段,它在请求中明确指出客户端请求的目标主机和端口。这是因为多个网站可以共享同一个 IP 地址(虚拟主机)。

示例:Host: www.example.com

(2)Connection 头部

HTTP/1.1 引入了 Connection 头部,允许控制连接的状态,常用的值包括 keep-alive(保持连接)和 close(关闭连接)。

示例:Connection: keep-alive

(3)Cache-Control 头部

HTTP/1.1 加强了对缓存的控制,Cache-Control 头部使得客户端和代理可以更精确地控制缓存策略。

常用的指令包括:

no-cache:不使用缓存,必须向服务器验证。

max-age=3600:资源最大缓存时间为 3600 秒。

(4)Transfer-Encoding 头部

HTTP/1.1 支持 Transfer-Encoding,允许服务器将响应分块发送。对于无法提前知道数据大小的响应,分块传输非常有用。

示例:Transfer-Encoding: chunked

(5)Status Codes 增强

HTTP/1.1 引入了更多的状态码:

100 Continue:客户端可以继续发送请求的剩余部分。

206 Partial Content:表示响应体是部分内容,通常用于断点续传。

409 Conflict:请求与当前资源状态发生冲突。

410 Gone:表示资源已被永久删除。

5.HTTP/1.1的优点

(1)持久连接

持久连接减少了每个请求建立新连接的开销,尤其在页面需要加载多个资源时,显著减少了延迟。

(2)管道化

管道化允许同时发出多个请求,虽然它的支持并不完全广泛,但它仍然提高了吞吐量。

(3)增强的缓存机制

HTTP/1.1 强化了缓存机制,使得客户端能够更智能地缓存和重用资源,减少了不必要的网络流量。

(4)虚拟主机支持

HTTP/1.1 的虚拟主机功能,使得多个网站可以共享同一 IP 地址,这对于现代的 Web 托管服务(如共享主机、云托管)至关重要。

6.HTTP/1.1的缺点

(1)管道化并未完全普及

尽管 HTTP/1.1 支持管道化,但由于浏览器和服务器的兼容性问题,管道化的效果并不显著。现代的 HTTP/2 通过多路复用解决了这个问题。

(2)延迟

虽然 HTTP/1.1 改进了持久连接和缓存机制,但对于现代 Web 页面的需求,它仍然存在一些性能瓶颈,例如每个 TCP 连接的串行化请求,仍然需要时间进行顺序处理。

7.HTTP/1.1的总结

HTTP/1.1 在 HTTP/1.0 的基础上进行了一些重要的优化,尤其是在持久连接、管道化、缓存控制和虚拟主机支持方面。它大大提高了 Web 服务的性能,但仍然存在一些限制,尤其是针对复杂的网页和多资源请求的性能瓶颈。随着 HTTP/2 和 HTTP/3 的引入,HTTP/1.1 正在逐步被更先进的协议取代,但仍然在许多场景中广泛使用。

三、HTTP2.0

HTTP/2 于 2015 年 5 月发布,并由 IETF (Internet Engineering Task Force) 通过 RFC 7540 正式定义。HTTP/2 基于 Google的 SPDY 协议,并且在传输效率、带宽优化和延迟减少方面做出了显著改进。HTTP/2 旨在解决 HTTP/1.1 中的一些性能瓶颈。

1.HTTP/2.0的特点

HTTP/2 引入了一些新的特性,主要优化了 HTTP 协议在性能和传输效率方面的表现。

以下是 HTTP/2 的关键特性:

(1)二进制协议

HTTP/2 完全改变了 HTTP 的传输方式。与 HTTP/1.x 的文本协议不同,HTTP/2 使用二进制协议进行数据传输。数据被分解成小的帧(Frame),通过多路复用的方式在一个连接上并行传输多个请求和响应。这使得数据传输更高效、更少的解析和更小的传输开销。

(2)多路复用(Multiplexing)

在 HTTP/2 中,所有的请求和响应都可以在一个单一的 TCP 连接中并行传输,而不需要等待其他请求的完成。这个特性彻底解决了 HTTP/1.1 中的“头阻塞”问题,在同一个连接上处理多个请求,避免了多个连接的建立和关闭,减少了延迟。

(3)请求优先级(Prioritization)

HTTP/2 允许客户端为每个请求分配优先级,这样服务器可以根据请求的重要性或紧急性优化响应顺序。通过优先级机制,服务器能够智能地调度资源,优化重要资源的加载顺序,从而提升页面的响应速度。

(4)头部压缩(Header Compression)

HTTP/2 使用 HPACK 算法来压缩 HTTP 请求和响应头部。HTTP 请求头和响应头通常包含重复的内容(例如 User-Agent、Host、Cookie 等),HPACK 压缩算法通过字典和增量编码技术,显著减少了这些重复信息的传输量,节省了带宽。

(5)流控制(Flow Control)

HTTP/2 引入了流控制机制,它允许客户端和服务器控制每个连接上数据的流量。每个连接都被分为多个流,每个流都有独立的流量控制,防止某个流占用过多的资源。流控制的目标是防止网络拥塞和服务器过载,确保公平的带宽分配。

(6)服务器推送(Server Push)

服务器推送是 HTTP/2 的一个创新特性。它允许服务器在客户端请求某些资源时,主动推送其他相关资源到客户端,而不需要客户端明确请求。例如,客户端请求一个 HTML 文件,服务器可以同时将 CSS 和 JavaScript 文件推送到客户端。这样可以减少资源请求的延迟,提升页面加载速度。

2.HTTP/2.0的请求和响应的结构

在 HTTP/2 中,数据以二进制帧的形式进行传输,帧通过流(Stream)来组织。

(1)帧(Frame)

每个帧都有一个固定的头部,表示它的类型和其他相关信息。

HTTP/2 中的帧类型:

HEADERS:用于传输请求和响应的头部。

DATA:用于传输数据部分(响应体或请求体)。

PRIORITY:表示流的优先级。

RST_STREAM:用于重置流。

WINDOW_UPDATE:用于流量控制。

PUSH_PROMISE:用于服务器推送。

(2)流(Stream)

一个流是一个双向的 HTTP/2 通道,可以在其中传输多个帧。每个流都有一个唯一的标识符,并且在流中传输的数据被分成多个帧。这使得多个请求和响应可以并行传输,而不会阻塞其他请求。

(3)数据流(Data Stream)

HTTP/2 的数据流包含请求和响应的所有数据。这些数据通过帧(如 DATA 帧)进行传输,客户端和服务器可以并行传输多个数据流。

3.HTTP/2.0的优点

(1)多路复用,减少延迟

通过多路复用,HTTP/2 能够在单一连接上同时处理多个请求和响应,从而减少了因等待其他请求响应而带来的延迟。

(2)头部压缩,节省带宽

头部压缩使得请求和响应的头部数据量显著减少,尤其是对于经常重复的请求头(如 cookies 和 host 信息)。这样减少了传输的数据量,节省了带宽。

(3)更好的流量控制

HTTP/2 引入的流量控制机制能够使得客户端和服务器更加灵活地管理带宽和传输流量,防止资源过载。

(4)提升页面加载速度

服务器推送和请求优先级机制使得客户端和服务器可以更加智能地进行资源调度,从而更快地加载页面内容。通过预先推送和优化请求顺序,用户能够更早地获取所需的资源。

4.HTTP/2.0的缺点

(1)中间件支持

由于 HTTP/2 的二进制格式和多路复用特性,它对现有的代理和中间件架构提出了挑战,特别是对于那些只支持 HTTP/1.x 的中间件。为了向下兼容,很多系统仍然需要支持 HTTP/1.x。

(2)复杂性增加

与 HTTP/1.1 相比,HTTP/2 的协议结构更加复杂,尤其是在多路复用、流量控制和优先级等方面。虽然这些特性能提高性能,但它们也使得开发和维护变得更加复杂。

5.HTTP/2.0与HTTP/1.1的的对比

6.HTTP/2.0的总结

HTTP/2 是对 HTTP/1.x 协议的重大改进,优化了 Web 性能,尤其是在多资源加载、延迟减少和带宽利用方面。通过二进制传输、多路复用、头部压缩和服务器推送等特性,HTTP/2 能够显著提高 Web 页面的加载速度和响应能力。虽然部署 HTTP/2 可能需要一定的技术支持,尤其是在加密和中间件兼容性方面,但它的优势使得它成为现代 Web 开发的首选协议之一。

四、HTTP3.0

HTTP/3 是继 HTTP/2 之后的新一代 HTTP 协议,它旨在进一步提升 Web 性能,尤其是在连接建立、延迟和丢包容忍度方面做出改进。HTTP/3 采用了 QUIC(Quick UDP Internet Connections)协议作为传输层,而非传统的基于 TCP 的连接。QUIC 本身最早由 Google 提出,随后成为 IETF(互联网工程任务组)标准,并最终成为 HTTP/3 的核心部分。

HTTP/3 的目标是解决 HTTP/2 中的一些瓶颈,如连接建立延迟、TCP 的拥塞控制问题、头阻塞等问题。它通过引入基于 UDP 的传输协议来实现更快、更可靠的数据传输。

1.HTTP/3 与 HTTP/2 的主要区别

2.QUIC 协议

HTTP/3 的核心是 QUIC 协议,QUIC 是基于 UDP 的协议,设计目标是减少连接建立时间和提高传输性能。QUIC 解决了 TCP 中的一些问题,主要包括:

(1)减少连接建立时间

QUIC 可以在 0-1 次往返时间(RTT)内建立连接,而传统的 TCP 协议需要经过三次握手才能建立连接。QUIC 结合了加密和连接建立过程,能够减少延迟,特别是对于高延迟网络环境,效果更为显著。

(2)改进的流量控制

QUIC 在传输数据时能够更精细地控制每个流的传输量,避免了 TCP 的全局流量控制和头阻塞问题。在 QUIC 中,流是独立的,每个流可以独立控制,避免了一个流的阻塞影响到其他流。

(3)更好的丢包容忍性

QUIC 在处理丢包时,比 TCP 更加高效。TCP 一旦发生丢包,会停止传输数据并进行重传,而 QUIC 则可以同时进行多个流的传输,确保其他流不会受到丢包影响。QUIC 使用了更先进的拥塞控制算法,提供更好的丢包恢复能力。

(4)内建加密(TLS 1.3)

QUIC 强制使用 TLS 1.3 进行加密,提供比传统 TLS 更高效的加密和握手过程。TLS 握手被与 QUIC 的连接建立合并,从而减少了连接建立的延迟。

(5)0-RTT 数据传输

QUIC 支持 0-RTT 数据传输,即在客户端与服务器之间建立第一个连接后,客户端可以在后续的连接中立即开始数据传输,无需等待完整的握手过程。这对于需要快速连接和低延迟的应用非常有用。

3.HTTP/3 的新特性

(1)多路复用的改进

与 HTTP/2 类似,HTTP/3 支持多路复用,即允许多个请求和响应同时在一个连接中传输。然而,HTTP/2 中的多路复用受限于 TCP 连接的队头阻塞问题,HTTP/3 基于 QUIC 协议解决了这一问题。每个流在 QUIC 中都是独立的,流之间不会互相干扰,这使得数据传输更加高效。

(2)头部压缩:QPACK

HTTP/3 使用 QPACK 代替了 HTTP/2 中的 HPACK。QPACK 采用了与 QUIC 协议配合的压缩方式,优化了头部的压缩过程,避免了头部阻塞问题,提升了传输效率。

(3)零 RTT 和迁移性

QUIC 协议的零 RTT(0-RTT)特性使得客户端和服务器之间的首次连接可以非常快速地建立。而且,QUIC 具有更好的迁移性——当用户的 IP 地址发生变化时,QUIC 能够继续保持连接而无需重新建立连接,这对于移动网络环境中的应用非常重要。

4.HTTP/3 的优点

(1)减少连接建立延迟

QUIC 协议在 0-1 次往返时间内建立连接,相比 TCP 三次握手过程大大减少了延迟,尤其适用于高延迟网络环境。

(2)消除队头阻塞

在 HTTP/2 中,多个请求和响应会在同一个 TCP 连接中排队传输,若某个请求发生延迟,后续的请求也会被阻塞(队头阻塞)。而 HTTP/3 使用 QUIC 协议消除了这一问题,每个流都是独立的,不会互相干扰。

(3)提高丢包恢复能力

QUIC 在丢包发生时具有更强的容错能力,能够在多个流之间并行传输数据,即使某个流丢包,其他流也能继续进行,不会发生全局的重传。

(4)内置加密提高安全性

HTTP/3 强制使用 TLS 1.3 进行加密,相较于 HTTP/2 中可选的加密方式,它提高了数据传输的安全性,并且加密过程更加高效。

(5)移动网络适应性

QUIC 的迁移性使得在用户的 IP 地址变化时(例如从 Wi-Fi 切换到移动数据)依然能够保持连接。这对于现代移动设备非常有用,可以避免在切换网络时丢失连接。

5.HTTP/3 的缺点

(1)对 UDP 的依赖

QUIC 基于 UDP,虽然这在性能上有很多优势,但它也带来了一些挑战,特别是在一些企业网络环境中,UDP 流量可能会受到防火墙或 NAT(网络地址转换)设备的限制。对于 UDP 流量的支持不如 TCP 广泛,这可能会影响一些网络环境下的稳定性。

(2)部署复杂性

与 HTTP/2 相比,HTTP/3 和 QUIC 的部署更加复杂,特别是对于现有的服务器和中间件。如果服务器或网络设备不支持 QUIC,可能需要进行额外的配置或升级。

6.总结

HTTP/3 是为了弥补 HTTP/2 中的一些性能和延迟瓶颈而诞生的协议。通过采用 QUIC 协议,它实现了更快速的连接建立、更高效的流量控制、更低的延迟和更强的丢包恢复能力。HTTP/3 不仅适用于高延迟和丢包严重的网络环境,还能提高移动设备的网络适应性,并强制加密,提升安全性。尽管部署上存在一些挑战,但随着技术的成熟,HTTP/3 很可能会成为未来 Web 通信的主流协议。

http://www.xdnf.cn/news/211825.html

相关文章:

  • 蓝桥杯 10. 凯撒加密
  • [C]基础14.字符函数和字符串函数
  • 网络原理—应用层和数据链路层
  • 指针(5)
  • Spring Boot 集成 ActiveMQ 实现异步消息通信(一)
  • 跨平台项目部署全攻略:Windows后端+Mac前端在服务器的协同实战
  • Arduion 第一天,变量的详细解析
  • 三格电子——四路CAN转4G网关使用中的常见问题
  • 【深度学习新浪潮】ISP芯片算法技术简介及关键技术分析
  • 深度解析 MyBatis`@TableField(typeHandler = JacksonTypeHandler.class)`:优雅处理复杂数据存储
  • 深入理解二分查找
  • AI防摔倒检测系统
  • 实验七:基于89C51和DS18B20的温度采集与显示
  • 【从滚动条缺失到布局体系:前端布局问题的系统性思考】
  • pytorch 一些常用语法
  • 图漾官网Sample_V1版本C++语言完整参考例子---单相机版本
  • 企业办公协同平台安全一体化生态入住技术架构与接口标准分析报告
  • ubnuntu使用conda进行虚拟环境迁移,复制,克隆
  • Dify 使用模版转换实现更丰富的输入格式支持
  • linux FTP服务器搭建
  • 通信协议——SPI通信协议
  • Go语言中的错误处理
  • CSS:编写位置分类
  • PDF编辑器:Foxit PDF Editor Pro 版功能解析
  • JVM对象存储格式
  • 解决调用Claude 3.7接口 403 Request not allowed问题
  • 贝叶斯优化RF预测模型
  • 轻松实现CI/CD: 用Go编写的命令行工具简化Jenkins构建
  • 处理pdf文件的常用库unstructured和PyPDF2
  • 【PyTorch动态计算图原理精讲】从入门到灵活应用