# 0http 中文文档

规范地址：https://npmcn.com/package/0http/

版本：5\.2\.0
npm 元数据更新时间：2026-10-09T08:25:43.429Z
中文译文更新时间：2026-10-31T13:12:57.945Z
软件包许可：MIT

本文由上游 README 机器翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/0http
原文对照：https://npmcn.com/package/0http/?lang=original
项目主页：https://github.com/BackendStack21/0http#readme
源码仓库：https://github.com/BackendStack21/0http

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：60.8 kB，12 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=22\.x
- 运行依赖：3 个
- 首次发布：2019-03-16T16:40:25.806Z
- 最新版本发布：2026-10-09T08:25:42.628Z
- 已发布版本数：46（近 12 个月 6 个）

## 中文简介

零摩擦HTTP请求路由器。对速度的需求！

## 安装

```sh
npm install 0http
```

也可以使用：`pnpm add 0http`、`yarn add 0http`、`bun add 0http`

## README

# 介绍

[![NPM version](https://badgen.net/npm/v/0http)](https://www.npmjs.com/package/0http) [![NPM Total Downloads](https://badgen.net/npm/dt/0http)](https://www.npmjs.com/package/0http) [![License](https://badgen.net/npm/license/0http)](https://www.npmjs.com/package/0http) [![TypeScript support](https://badgen.net/npm/types/0http)](https://www.npmjs.com/package/0http) [![Github stars](https://badgen.net/github/stars/jkyberneees/0http?icon=github)](https://github.com/jkyberneees/0http)

![](https://npmcn.com/package/0http/docs/0http-logo.svg)

零摩擦HTTP框架：

-   调整了Node.js HTTP服务器的高吞吐量。
-   高性能和可定制的请求路由器。

![Performance Benchmarks](https://npmcn.com/package/0http/docs/Benchmarks.png)

> 你自己检查一下： [https://web-frameworks-benchmark.netlify.app/result?f=feathersjs](https://web-frameworks-benchmark.netlify.app/result?f=feathersjs), 0 http,洋桧木fastify nestjs-express,表达,帆,nestjs-fastify restana

## 安装

从npm安装包：

```bash
npm install 0http
```

## 使用

```js
const cero = require('0http')
const { router, server } = cero()

router.get('/hello', (req, res) => {
  res.end('Hello World!')
})

router.post('/do', (req, res) => {
  // ...
  res.statusCode = 201
  res.end()
})

//...

server.listen(3000)
```

### Trie路由器（无依赖，最快）

具有相同API的分段路由器，中间件链接，嵌套路由器 并将错误包含作为默认的顺序路由器，但每个路由没有正则表达式， 没有路由缓存大小，没有外部依赖。静态路由解析为 随着路由数的增加，恒定时间和动态路由保持不变。

```js
const trie = require('0http/lib/router/trie')
const { router, server } = cero({ router: trie() })

router.use((req, res, next) => next())
router.get('/users/:id', (req, res) => res.end(req.params.id))
router.get('/files/*', (req, res) => res.end(req.params['*']))
```

选项: `caseSensitive` (默认 `true`)， `ignoreTrailingSlash` (默认 `true`),加上 `defaultRoute`， `errorHandler` 和 `id`． 模式: `/static`， `/:param`， `/:param?`， `/:name.ext` (或 `/:name.ext?`), `/*` 和 `RegExp` （命名组成为参数）。静态段是文字的，所以 `/a+b` 只匹配 `/a+b`.

区别于顺序路由器，故意：

-   默认区分大小写； `caseSensitive: false` 只折叠ASCII字母。
-   一、 `*` 这不是最后一段，或者a `?` 这不是最后一个字 参数段的，在注册时抛出，而不是匹配太多。
-   不存在的可选参数就是不存在 `req.params` ( 顺序路由器将其设置为 `undefined`，这也打击了一个继承的 同名参数)。
-   一个拖 `/*` 还匹配裸前缀，用 `'*'` 等于 `''`.
-   空路由段将被忽略(`/a//b` 是 `/a/b`）; 顺序路由器 截断路由的第一个空段。
-   与 `ignoreTrailingSlash: false`，即注册为 `/dir/` 匹配 `/dir/` 只和 `/dir` 匹配 `/dir` 只有。
-   不以。开头的请求路径 `/` 没有匹配。
-   `router.routes` 只列出RegExp路由；没有 `cacheSize` 选择。

# 支持/捐助💚

您可以支持这个项目的维护：

-   贝宝: [https://www.paypal.me/kyberneees](https://www.paypal.me/kyberneees)

# 安全笔记

-   **错误永远不会使这个过程崩溃。** 抛出（或拒绝）的路由处理程序 响应头已经发送后包含：响应结束或 套接字关闭，服务器继续服务。一个自定义 `errorHandler` 那 本身抛出或拒绝也包含有一个裸露 `500`。如果响应是 习俗已经结束了吗 `errorHandler` 被跳过(写到结束？ 响应将引发不可捕获流错误)。投掷或拒绝 `defaultRoute` 以同样的方式包含。
-   **挂载前缀仅从路径中剥离。** 查询字符串never 成为嵌套路由器路径的一部分，所以 `GET /api/acme?x=/admin` 到达 路由器安装在 `/api/:tenant` 作为 `/?x=/admin`， never as `/admin`.
-   **顺序路由匹配不区分大小写。** `/Admin`， `/admin` 和 `/ADMIN` 都匹配注册为 `/admin`。反向代理，waf和 对路径区分大小写的认证层必须相应地对齐。 缺省情况下，trie路由器区分大小写并处理静态段 字面上（没有正则表达式的含义），因此它与开箱即用的这些层一致。
-   **安装嵌套路由器 `use()`.** 只有 `router.use(prefix, subRouter)` 当进入一个嵌套的路由器时重写URL。路由器被传递给 `get()` 或者 `on()` 被视为普通中间件，不会与其子路由匹配。
-   **嵌套路由器拥有不匹配的请求。** 如果挂载的路由器没有找到路由 对于重写的URL，它会响应 `404` 本身和母链是不一样的 恢复（不像Express安装的应用程序会失败）。
-   **路由缓存受内存限制。** 与参数匹配， `404`年代, 长度超过4KB的路径永远不会被缓存，并且缓存会被额外封顶 通过总大小-所以攻击者控制的唯一路径不能固定内存。这个 Trie路由器根本没有请求键缓存：它的静态表有一个 每个注册路由和已知HTTP方法条目，而不是每个请求路径。

# 更多的

-   网站和文件： [https://0http.21no.de](https://0http.21no.de/)

## 常见问题

### 0http 是什么？

零摩擦HTTP请求路由器。对速度的需求！

### 如何安装 0http？

在项目目录运行 npm install 0http，或使用 pnpm add / yarn add / bun add。

### 0http 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### 0http 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### 0http 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=22\.x。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### 0http 可以商用吗？

0http 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### 0http 还在维护吗？

最新版本 5\.2\.0 发布于 2026/10/09（25 天前）；至今共发布 46 个版本，其中过去 12 个月发布了 6 个；首次发布于 2019/03/17。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

