Skip to content

ETag 中间件

使用该中间件即可轻松为响应添加 ETag 头。

导入

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

用法

ts
const app = new Hono()

app.use('/etag/*', etag())
app.get('/etag/abc', (c) => {
  return c.text('Hono is cool')
})

保留的响应头

304 响应必须包含与等效的 200 OK 响应相同的头部。默认保留的头包括:Cache-Control、Content-Location、Date、ETag、Expires 与 Vary。

若希望追加更多头部,可使用 retainedHeaders 选项,并借助包含默认值的 RETAINED_304_HEADERS 数组常量:

ts
import { etag, RETAINED_304_HEADERS } from 'hono/etag'

// ...

app.use(
  '/etag/*',
  etag({
    retainedHeaders: ['x-message', ...RETAINED_304_HEADERS],
  })
)

选项

optional weak:boolean

是否使用弱验证。若设置为 true,会在值前添加 w/ 前缀。默认值为 false

optional retainedHeaders:string[]

在 304 响应中需要保留的头部列表。

optional generateDigest:(body: Uint8Array) => ArrayBuffer | Promise<ArrayBuffer>

自定义的摘要生成函数。默认使用 SHA-1。该函数会收到响应体的 Uint8Array,需要返回 ArrayBuffer 或 Promise 的哈希值。

Released under the MIT License.