跳转到正文

Compress 中间件 ​

此中间件根据 Accept-Encoding 请求头压缩响应体。

说明

注意:Cloudflare Workers 和 Deno Deploy 会自动压缩响应体,无需使用此中间件。

导入 ​

ts
import { Hono } from 'hono'
import { compress } from 'hono/compress'

用法 ​

ts
const app = new Hono()

app.use(compress())

选项 ​

optional encoding: 'gzip' | 'deflate' ​

允许使用的响应压缩方式,可以是 gzip 或 deflate。未指定时两者都允许,并根据 Accept-Encoding 请求头选择。如果未指定此选项,且客户端在 Accept-Encoding 中同时提供两者,则优先使用 gzip。

optional threshold: number ​

执行压缩的最小大小,单位为字节。默认值为 1024 字节。

optional contentTypeFilter: RegExp | (contentType: string) => boolean ​

根据响应的 Content-Type 判断是否压缩的 RegExp 或函数。默认使用内置的可压缩 Content-Type 列表。

可以传入 RegExp,仅压缩匹配的 Content-Type:

ts
// Compress only JSON responses
app.use(compress({ contentTypeFilter: /^application\/json/ }))

也可以传入函数实现自定义逻辑。内置的 COMPRESSIBLE_CONTENT_TYPE_REGEX 也已导出,可以用来扩展默认行为:

ts
import {
  compress,
  COMPRESSIBLE_CONTENT_TYPE_REGEX,
} from 'hono/compress'

// Compress the default Content-Types plus a custom one
app.use(
  compress({
    contentTypeFilter: (type) =>
      COMPRESSIBLE_CONTENT_TYPE_REGEX.test(type) ||
      type === 'application/x-myformat',
  })
)

基于 MIT 许可证发布。