Skip to content

代理助手

¥Proxy Helper

当使用 Hono 应用作为(反向)代理时,Proxy Helper 提供了有用的功能。

¥Proxy Helper provides useful functions when using Hono application as a (reverse) proxy.

导入

¥Import

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

proxy()

proxy() 是用于代理的 fetch() API 封装器。参数和返回值与 fetch() 相同(代理特定选项除外)。

¥proxy() is a fetch() API wrapper for proxy. The parameters and return value are the same as for fetch() (except for the proxy-specific options).

Accept-Encoding 标头被替换为当前运行时可以处理的编码。删除不必要的响应标头,并返回一个 Response 对象,你可以将其作为处理程序的响应返回。

¥The Accept-Encoding header is replaced with an encoding that the current runtime can handle. Unnecessary response headers are deleted, and a Response object is returned that you can return as a response from the handler.

示例

¥Examples

简单用法:

¥Simple usage:

ts
app.get('/proxy/:path', (c) => {
  return proxy(`http://${originServer}/${c.req.param('path')}`)
})

复杂用法:

¥Complicated usage:

ts
app.get('/proxy/:path', async (c) => {
  const res = await proxy(
    `http://${originServer}/${c.req.param('path')}`,
    {
      headers: {
        ...c.req.header(), // optional, specify only when forwarding all the request data (including credentials) is necessary.
        'X-Forwarded-For': '127.0.0.1',
        'X-Forwarded-Host': c.req.header('host'),
        Authorization: undefined, // do not propagate request headers contained in c.req.header('Authorization')
      },
    }
  )
  res.headers.delete('Set-Cookie')
  return res
})

或者你可以将 c.req 作为参数传递。

¥Or you can pass the c.req as a parameter.

ts
app.all('/proxy/:path', (c) => {
  return proxy(`http://${originServer}/${c.req.param('path')}`, {
    ...c.req, // optional, specify only when forwarding all the request data (including credentials) is necessary.
    headers: {
      ...c.req.header(),
      'X-Forwarded-For': '127.0.0.1',
      'X-Forwarded-Host': c.req.header('host'),
      Authorization: undefined, // do not propagate request headers contained in c.req.header('Authorization')
    },
  })
})

ProxyFetch

proxy() 的类型定义为 ProxyFetch,如下所示

¥The type of proxy() is defined as ProxyFetch and is as follows

ts
interface ProxyRequestInit extends Omit<RequestInit, 'headers'> {
  raw?: Request
  headers?:
    | HeadersInit
    | [string, string][]
    | Record<RequestHeader, string | undefined>
    | Record<string, string | undefined>
}

interface ProxyFetch {
  (
    input: string | URL | Request,
    init?: ProxyRequestInit
  ): Promise<Response>
}

Hono v4.7 中文网 - 粤ICP备13048890号