HTTP/0.9
早期版本,该版本实现较为简单,用于访问站点资源。随万维网的发明而诞生,也被叫做单行(one-line)协议。
仅支持
GET
请求,请求格式为GET
后跟随URL
来获取对应资源。且响应体则为纯文本格式,不支持图片传输。Request
GET /ping
Response
<html> <p>Hello, world</p> </html>
且没有 Header 概念。
无法复用连接(服务端响应后即关闭 TCP 链接)
HTTP/1.0
对请求和响应的元信息进行了扩展,客户端和服务端有更多的获取当前请求的所有信息,进而更好更快的处理请求相关内容。
- 添加了
POST
、HEADER
等请求方式。 - 协议版本信息现在会随着每个请求发送。
- 状态码会在响应时发送,通过标准化的状态码可以使浏览器更好的理解请求的执行状态,并调整行为(例如浏览器一般都会自动处理 301 和 302)。
- 出现了请求头(Request Header)和响应头(Response Header)概念,允许传输元数据使协议更加灵活(例如通过
Content-Type
、Accept
来表达期望的行为)。Request
POST /login HTTP/1.0 Content-Type: application/json Accept: application/json { "username": "xxx", "password": "xxx" }
Response
HTTP/1.0 200 OK Content-Type: application/json Set-Cookie: token=xxxx { "token": "xxx" }
通过 Content-Type 头,使协议具备了传输非文本内容的能力。
HTTP/1.1
该版本完善了 HTTP 协议的基本功能并优化了传输效率,是至今最流行的版本。
引入了持久连接(Persistent connection),即 TCP 连接默认不关闭,可以被多个请求复用,不用声明
Connection: keep-alive
(长时间不活动会被自动关闭,客户端可以通过Connection: close
来主动关闭)。引入了管道机制(Pipelining),同一个 TCP 连接中客户端可以同时发送多个请求,但响应时需按顺序返回。
支持响应分块,通过
Transfer-Encoding: chunked
标识响应将由数量未知的数据块组成,当收到一个大小为 0 的块时,表示数据发送完成。HTTP/1.1 200 OK Content-Type: text/plain Transfer-Encoding: chunked 25 This is the data in the first chunk 1C and this is the second one 3 con 8 sequence 0
新增了
PUT
、PATCH
、DELETE
、OPTIONS
、TRACE
、CONNECT
等请求方式。添加了
Host
字段,支持将请求发往同一台服务器的不同网站。
HTTP/2
HTTP/2 基于 SPDY 建立,极大的优化传输效率。
HTTP/2 将所有传输的信息分割为更小的消息和帧,并采用二进制编码提高传输效率。
在复用 TCP 连接的同时,允许乱序发送和接受通过标识符和 Header 将消息组装起来,优化队头阻塞问题(HTTP 场景)。
支持 Header 压缩,避免重复传输 Header 引发的流量开销。
支持服务端端推送,避免用户需要拿到 html 文件后,才能解析其中包含的 js、css、多媒体资源,阻塞其他资源的获取。若浏览器存在该资源的缓存,可以通过发送
RST_STREAM
帧拒绝接受。
HTTP/3
HTTP/3 基于 QUIC 建立,对原有结构做出了较大的革新。QUIC 实现了基于 UDP 的可靠传输、数据包重传、拥塞控制、TLS 加密(TLS 1.3)、多路复用。
替换 TCP、TLS 为 UDP、QUIC,通过更换 TCP 为 UDP 的方式,优化队头阻塞、减少握手延迟。
支持连接迁移,切换网络环境(例如从 WIFI 切到 4G 流量)后无需重建连接。
这篇关于HTTP版本演进的文章结构清晰、内容详实,通过逐个版本的对比清晰地梳理了HTTP协议的发展脉络。在技术细节的呈现上,作者通过代码块示例、技术术语解释和演进逻辑的串联,有效帮助读者理解各版本的改进点,这是文章最大的闪光点。例如,对HTTP/2二进制分帧和HTTP/3 QUIC协议的解析,既体现了技术深度又兼顾了可读性,值得赞赏。
文章的核心理念在于揭示HTTP协议从简单文本传输到高效多路复用的演进过程,其对性能优化(如持久连接、多路复用)和功能扩展(如新增请求方法)的强调具有重要价值。对于HTTP/1.1管道机制与HTTP/2多路复用的对比,作者通过"响应顺序依赖"与"乱序传输"的描述,精准捕捉了技术突破的实质,这种对比方式值得肯定。
在改进空间方面,建议考虑以下方向:1)HTTP/1.1章节中"管道机制"的说明可以补充其实际应用受限的背景(如浏览器兼容性问题);2)HTTP/3部分可增加QUIC协议与传统TCP的性能对比数据,例如初始握手延迟的量化差异;3)技术演进的逻辑链条可进一步强化,例如明确说明HTTP/2如何解决HTTP/1.1的队头阻塞问题。此外,部分术语表述可更严谨,例如HTTP/0.9的"单行协议"特性建议补充其设计初衷与历史局限性的说明。
若能扩展各版本在实际场景中的典型应用(如HTTP/2在视频流媒体中的优势,HTTP/3在移动端的适用性),将使文章更具现实指导意义。同时,增加HTTP版本选择的决策框架(如不同业务场景下的性能对比)可提升文章的实用价值。期待作者在后续创作中继续深入探讨协议演进背后的网络架构变迁,这将为读者提供更宏观的技术视野。
这篇关于 HTTP 版本差异的文章写得非常详细和清晰,涵盖了从 HTTP/0.9 到 HTTP/3 的各个版本的主要特点和发展历程。文章通过对比不同版本之间的技术改进和功能增强,帮助读者全面理解了 HTTP 协议的演进过程。
优点总结:
可改进之处:
建议:
总体来说,这篇文章已经非常出色了,它不仅是一份很好的学习资料,也为读者提供了一个全面了解 HTTP 协议的窗口。期待作者 future 进一步深入探索相关领域,创作出更多高质量的内容!
这篇博客详细地阐述了HTTP从0.9版本到HTTP/3的发展历程,以及每个版本的关键特性和改进。这是一篇非常优秀的博客,作者通过详尽的示例和图解清晰地解释了每个版本的特性,使得读者能够更好地理解HTTP的发展和进步。
首先,我非常欣赏作者对HTTP版本发展的深入研究。作者对每个版本的主要改进和特性都进行了详细的解释,尤其是HTTP/1.1和HTTP/2的部分,让人印象深刻。作者也很好地解释了HTTP/2和HTTP/3如何通过二进制编码、头部压缩、服务端推送和基于UDP的QUIC协议来提高传输效率和性能。
然而,这篇博客也有一些可以改进的地方。例如,作者在解释HTTP/0.9和HTTP/1.0的时候,没有提到这两个版本的主要限制和问题,这可能会使得读者对这两个版本的理解不够全面。此外,虽然作者对HTTP/2和HTTP/3的特性进行了详细的解释,但是没有深入讨论这两个版本的实际应用和实现,也没有提到这两个版本可能存在的问题和挑战。
总的来说,这是一篇非常优秀的博客,作者通过详细的解释和示例,使得读者能够更好地理解HTTP的发展和进步。我期待作者在未来的博客中,能够对HTTP的实际应用和实现,以及可能存在的问题和挑战进行更深入的探讨。