Skip to content

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/2
  • http/1.1 = HTTP/1.1