Node.js HTTP/2
HTTP/2 是对 HTTP/1.1 的重大改进,目标:更快、更高效、更安全。
HTTP/2 核心改进
| 特性 | 说明 |
|---|---|
| 多路复用 | 单个 TCP 连接同时发送多个请求/响应,避免多连接开销 |
| 二进制分帧 | 在应用层和传输层之间增加二进制分帧层,更高效 |
| 头部压缩 | HPACK 算法压缩请求/响应头,减少冗余 |
| 服务器推送 | 服务器可主动推送资源,无需客户端请求 |
| 流优先级 | 指定请求优先级,优化资源加载顺序 |
HTTP/1.1 vs HTTP/2
HTTP/1.1 请求:
req1 → wait → res1 → req2 → wait → res2
(串行,队头阻塞)
HTTP/2 请求:
req1 ────→ res1 ────→
req2 ────→ res2 ────→ 同一个TCP连接并行
req3 ────→ res3 ────→Node.js 创建 HTTP/2 服务
js
import http2 from 'node:http2'
import fs from 'node:fs'
const server = http2.createSecureServer({
key: fs.readFileSync('server.key'),
cert: fs.readFileSync('server.crt'),
})
server.on('stream', (stream, headers) => {
// stream 相当于 HTTP/1.1 的 req + res
stream.respond({
'content-type': 'text/html',
':status': 200,
})
stream.end('<h1>Hello HTTP/2</h1>')
})
server.listen(8443)HTTP/2 浏览器要求必须使用 TLS(HTTPS),所以需要 SSL 证书。
如何判断 HTTP 版本
浏览器 DevTools → Network → 右键表头 → 勾选 Protocol 列:
h2= HTTP/2http/1.1= HTTP/1.1