跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
HTTP 1.0、HTTP 1.1 与 HTTP 2.0 的区别
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= HTTP/1.0、HTTP/1.1 与 HTTP/2.0 的区别 = '''HTTP'''(HyperText Transfer Protocol)是万维网数据通信的基础协议。随着互联网的发展,HTTP协议经历了多个版本的迭代,每个版本都针对前代的不足进行了优化。本文将详细对比HTTP/1.0、HTTP/1.1和HTTP/2.0的主要特性与差异。 == 概述 == HTTP协议用于客户端(如浏览器)与服务器之间的通信。不同版本的HTTP协议在性能、功能和实现方式上有显著差异: * '''HTTP/1.0'''(1996年):最早的标准化版本,支持基本请求-响应模型,但效率较低。 * '''HTTP/1.1'''(1997年):引入持久连接、管道化等优化,成为长期主流版本。 * '''HTTP/2.0'''(2015年):基于二进制分帧、多路复用等特性,显著提升性能。 == 核心特性对比 == {| class="wikitable" |- ! 特性 ! HTTP/1.0 ! HTTP/1.1 ! HTTP/2.0 |- | '''连接方式''' | 非持久连接(默认) | 持久连接(默认) | 多路复用 |- | '''头部压缩''' | 无 | 无 | HPACK压缩 |- | '''数据格式''' | 文本 | 文本 | 二进制帧 |- | '''服务器推送''' | 不支持 | 不支持 | 支持 |- | '''优先级控制''' | 无 | 有限(管道化) | 流优先级 |} === HTTP/1.0 的局限性 === * 每个请求需建立新TCP连接(高延迟)。 * 无主机头(Host header),无法支持虚拟主机。 * 无缓存控制机制。 示例请求: <syntaxhighlight lang="http"> GET /index.html HTTP/1.0 User-Agent: Mozilla/4.0 </syntaxhighlight> === HTTP/1.1 的改进 === ==== 持久连接 ==== 通过<code>Connection: keep-alive</code>(默认启用)复用TCP连接: <syntaxhighlight lang="http"> GET /page1.html HTTP/1.1 Host: example.com Connection: keep-alive GET /page2.html HTTP/1.1 Host: example.com </syntaxhighlight> ==== 管道化(Pipelining) === 客户端可连续发送多个请求(无需等待响应),但响应必须按序返回,易引发队头阻塞。 ==== 分块传输 === 通过<code>Transfer-Encoding: chunked</code>支持流式传输。 === HTTP/2.0 的革命性变化 === ==== 二进制分帧 === 将消息分解为二进制帧(Frame),例如: <mermaid> graph LR Message -->|拆分| Frame1 Message -->|拆分| Frame2 Frame1 -->|重组| Message Frame2 -->|重组| Message </mermaid> ==== 多路复用 === 单个连接上并行交错传输多个请求/响应,彻底解决队头阻塞。 ==== 头部压缩 === 使用HPACK算法压缩头部,减少冗余数据传输。压缩原理: <math> Huffman\ Encoding + \text{静态/动态字典} </math> ==== 服务器推送 === 服务器可主动推送资源(如CSS/JS),无需客户端显式请求。 == 实际案例 == '''场景:加载包含10个资源的网页''' * HTTP/1.0:10个TCP连接(串行) * HTTP/1.1:1个TCP连接(串行或管道化) * HTTP/2.0:1个TCP连接(并行传输) 性能对比(理论延迟): <mermaid> barChart title 页面加载延迟对比 x-axis 协议版本 y-axis 延迟(ms) bar HTTP/1.0: 1500 bar HTTP/1.1: 800 bar HTTP/2.0: 300 </mermaid> == 代码示例 == '''HTTP/2.0 的curl请求'''(需支持HTTP/2的客户端): <syntaxhighlight lang="bash"> curl --http2 https://example.com -v </syntaxhighlight> 输出示例: <syntaxhighlight lang="text"> * Using HTTP2, server supports multi-use * Connection state changed (HTTP/2 confirmed) </syntaxhighlight> == 总结 == * '''HTTP/1.1'''是当前最广泛支持的版本,但存在性能瓶颈。 * '''HTTP/2.0'''通过二进制协议和多路复用显著提升性能,但需要TLS加密(主流实现要求HTTPS)。 * 选择建议:现代应用应优先支持HTTP/2.0,同时保持HTTP/1.1兼容性。 [[Category:计算机科学]] [[Category:面试技巧]] [[Category:计算机网络]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)