Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HTTP/1.0、HTTP/1.1、HTTP/2和HTTP/3之间的主要区别【热度: 1,447】 #528

Open
yanlele opened this issue Aug 22, 2023 · 0 comments
Labels
网络 web 网络相关 腾讯 公司标签
Milestone

Comments

@yanlele
Copy link
Member

yanlele commented Aug 22, 2023

关键词:HTTP各版本之间区别

下面是一个表格,展示了HTTP/1.0、HTTP/1.1、HTTP/2和HTTP/3之间的主要区别:

特点 HTTP/1.0 HTTP/1.1 HTTP/2 HTTP/3
并发请求 不支持并发请求 支持有限的并发请求 引入多路复用(Multiplexing),支持更高级别的并发请求 引入QUIC协议,通过多路复用和UDP传输支持更高级别的并发请求
请求头压缩 不支持 不支持 引入HPACK算法对请求头进行压缩 引入QPACK算法对请求头进行压缩
二进制传输 不支持 不支持 使用二进制格式传输数据 使用二进制格式传输数据
流控制 不支持 不支持 支持流控制,可以控制每个流的数据传输速率 支持流控制,可以控制每个流的数据传输速率
服务器推送 不支持 不支持 引入服务器推送机制,服务器可以主动推送资源给客户端 引入服务器推送机制,服务器可以主动推送资源给客户端
连接复用 不支持 支持持久连接 支持多路复用,多个请求可以通过单个连接并行处理 支持多路复用,多个请求可以通过单个连接并行处理
安全性 不支持 引入HTTPS协议,支持加密传输 引入HTTPS协议,支持加密传输 引入HTTPS协议,支持加密传输
可靠性 不支持 不支持 支持头部压缩、流控制和服务器推送,提升传输的可靠性 引入QUIC协议,通过UDP传输提升传输的可靠性
开发复杂性 简单 对开发者较友好 引入了新的概念和协议,对开发者相对复杂 依赖QUIC协议,对开发者相对复杂
缓存机制 支持简单的请求响应缓存 引入了更强大的缓存控制机制,如ETag、Cache-Control等 引入了新的缓存机制,如Server Push、Priority等 类似HTTP/2,但通过QUIC对底层的传输进行了优化
底层协议 基于TCP 基于TCP 基于TCP或基于TLS的加密传输 基于QUIC(Quick UDP Internet Connections)
连接管理 每个请求/响应都需要建立和关闭连接 引入了持久连接,通过keep-alive头部保持连接 通过单个连接并行处理多个请求/响应 通过QUIC的连接复用和多路复用进行处理
传输效率 每个请求/响应都需要耗费时间来建立和关闭连接,浪费带宽 连接复用有助于减少建立连接的开销,并提高传输效率 通过多路复用、头部压缩等机制提高传输效率 通过QUIC的特性如连接复用、多路复用等提高传输效率
对丢包和延迟的影响 对丢包和延迟的恢复较慢。一个请求阻塞可能导致后续请求也受到影响 对丢包和延迟的恢复较快。使用流的方式可以并行处理请求 对丢包和延迟的恢复较快。使用流的方式可以并行处理请求 对丢包和延迟的恢复较快,QUIC通过UDP传输有利于降低延迟和丢包的影响
适用场景 简单的Web页面和静态资源 大多数Web应用程序 复杂的Web应用程序,需要更高的传输效率 复杂的Web应用程序,需要更高的传输效率和减少延迟
@yanlele yanlele added 网络 web 网络相关 腾讯 公司标签 labels Aug 22, 2023
@yanlele yanlele added this to the milestone Aug 22, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
网络 web 网络相关 腾讯 公司标签
Projects
None yet
Development

No branches or pull requests

1 participant