跳到内容

代理

代理

代理允许你在请求完成之前运行代码。然后,根据传入请求,你可以通过重写、重定向、修改请求或响应头,或者直接响应来修改响应。

使用场景

代理的一些常见有效场景包括

  • 读取传入请求的部分内容后进行快速重定向
  • 根据 A/B 测试或实验重写到不同的页面
  • 修改所有页面或部分页面的头信息

代理不适用于

  • 慢速数据获取
  • 会话管理

在代理中,使用带有 options.cacheoptions.next.revalidateoptions.next.tags 的 fetch 没有效果。

约定

在项目根目录或 src 目录中(如果适用)创建一个 proxy.ts(或 .js)文件,使其与 pagesapp 位于同一级别。

注意:尽管每个项目只支持一个 proxy.ts 文件,你仍然可以将你的代理逻辑组织成模块。将代理功能分解为单独的 .ts.js 文件,然后将它们导入到你的主 proxy.ts 文件中。这使得路由特定的代理管理更加清晰,并集中聚合在 proxy.ts 中进行控制。通过强制使用单个代理文件,可以简化配置,防止潜在冲突,并通过避免多层代理来优化性能。

示例

proxy.ts
import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'
 
// This function can be marked `async` if using `await` inside
export function proxy(request: NextRequest) {
  return NextResponse.redirect(new URL('/home', request.url))
}
 
// See "Matching Paths" below to learn more
export const config = {
  matcher: '/about/:path*',
}

了解更多关于使用 proxy 的信息,或参阅 proxy API 参考