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',
})
)