本文档涵盖了 Bun 的 HTTP 客户端实现和 Web 标准 Fetch API。这包括核心 HTTP 客户端引擎、JavaScript Fetch API 绑定、请求/响应处理以及网络层集成。
有关 HTTP 服务器功能,请参阅 服务器 API (Bun.serve)。有关更底层的套接字 API,请参阅 套接字 API 和网络协议。
Bun 的 HTTP 客户端构建在一个多层架构上,该架构同时提供了低级 HTTP 客户端功能和高级 Web 标准 Fetch API 兼容性。
来源: src/http.zig1-60 src/bun.js/webcore/streams.zig1-50 src/deps/uws.zig1-30
HTTPClient 结构体是 HTTP 客户端的核心,它管理着从发起请求到完成响应的完整 HTTP 请求生命周期。
来源: src/http.zig115-146 src/http.zig148-219 src/http.zig221-267
HTTP 客户端遵循从发起直到完成的结构化请求处理流程。
来源: src/http.zig400-500 src/http.zig1500-1600
Bun 实现的 Web 标准 Fetch API 具有全面的现代 HTTP 客户端功能支持。
| 功能 | 实现 | 代码参考 |
|---|---|---|
| 基本的 fetch() | HTTPClient 集成 | src/http.zig400-450 |
| 请求对象 | WebCore 请求绑定 | src/bun.js/api/server.zig20-25 |
| 响应对象 | WebCore 响应绑定 | src/bun.js/api/server.zig20-25 |
| Headers 操作 | FetchHeaders 实现 | src/http.zig35 |
| AbortSignal | 基于信号的取消 | test/js/web/fetch/fetch.test.ts190-335 |
| 流式响应体 | ReadableStream 集成 | src/bun.js/webcore/streams.zig195-592 |
| Data URLs | 内置数据 URL 解析器 | test/js/web/fetch/fetch.test.ts57-188 |
HTTP 客户端通过 HTTPRequestBody 联合体支持多种请求体类型。
来源: src/http.zig115-146 src/http.zig148-219
Bun 使用 µWebSockets 作为底层网络层,并为 HTTP 和 HTTPS 提供专门的上下文。
来源: src/http.zig40-55 src/deps/uws.zig1-150
HTTPS 连接通过 BoringSSL 集成进行处理,并具有全面的证书验证功能。
来源: src/bun.js/api/bun/socket.zig23-100 src/http.zig30-35
客户端包括通过 ProxyTunnel 实现的全面代理支持。
响应体通过 Bun 的流式传输基础设施进行处理。
来源: src/bun.js/webcore/streams.zig195-592 src/http.zig22-25
客户端根据 Content-Encoding 头部自动处理响应解压缩,并支持:
HTTP 客户端提供了全面的错误处理和超时管理
请求可以使用 Web 标准的 AbortSignal API 进行取消,该 API 与 Bun 的事件循环集成以实现高效取消
来源: src/http.zig71-101 test/js/web/fetch/fetch.test.ts190-335