Skip to content

代理

ts
import { Hono } from 'hono'

const app = new Hono()

app.get('/posts/:filename{.+.png$}', (c) => {
  const referer = c.req.header('Referer') // 获取 Referer header
  if (referer && !/^https:\/\/example.com/.test(referer)) {
    return c.text('Forbidden', 403) // 返回 403 Forbidden
  }
  return fetch(c.req.url) // 发起 fetch 请求到请求的 URL
})

app.get('*', (c) => {
  return fetch(c.req.url) // 发起 fetch 请求到请求的 URL
})

export default app

TIP

如果在使用类似代码时看到 Can't modify immutable headers. 错误,你需要克隆 response 对象。

ts
app.get('/', async (_c) => {
  const response = await fetch('https://example.com')
  // 克隆 response 以返回一个可以修改 header 的 response
  const newResponse = new Response(response.body, response)
  return newResponse
})

fetch 返回的 Response 对象的 headers 是不可变的。因此,如果修改它,将会发生错误。

在 MIT 许可证下发布。