Skip to content

Next.js 原理与运行时

Next.js Proxy 与鉴权、重写和运行时边界如何设计?

Proxy 适合做请求级的早期决策,但不应承载完整业务鉴权、数据库事务或长耗时逻辑。

适合阶段:资深前端 / 全栈面核心能力:Proxy · Middleware 迁移 · 鉴权

面试官想考什么

  • Proxy 和页面内鉴权有什么区别? 考察防护层次。
  • 重定向与 rewrite 如何选择? 考察 URL 和渲染语义。
  • Proxy 中能否访问数据库? 考察运行时限制。
  • 如何避免 matcher 误匹配和开放重定向? 考察安全与边界。

一句话回答

text
Proxy 放在请求很早的入口,适合做轻量路由判断、重写、重定向和粗粒度访问控制;真正资源授权仍要在 Server Component、Route Handler 或数据层复核,Proxy 代码必须按其运行时能力和 matcher 范围设计。

面试回答详解

1. Proxy 做什么

text
request -> matcher -> proxy decision
-> redirect / rewrite / continue
-> route handler or page authorization

它可以在请求进入页面前读取有限上下文,做 locale、实验分流、登录态初筛和路径重写。它不是把后端中间层搬进前端目录。

2. Redirect 与 rewrite

  • redirect:浏览器地址改变,适合登录跳转、规范 URL 和跨域入口。
  • rewrite:地址保持不变,适合内部路由映射或 BFF 转发,但要关注缓存和 SEO。

用户提供的 returnTo 必须限制为站内安全路径,避免开放重定向。

3. 鉴权分层

Proxy 可检查 cookie 是否存在,提前阻止明显未登录请求;页面或 API 仍需验证 session、租户、资源和动作权限。不能把“有 token”当作“能读这条数据”。

4. 运行时与性能

Proxy 常处于边缘请求路径,代码要轻、依赖要小、不能依赖 Node-only API 或长连接。matcher 要排除静态资源、内部构建路径和不需要处理的请求,避免每个资源都执行逻辑。

5. 生产治理

记录重写命中、拒绝原因、版本和区域,但不要日志化 cookie/token。变更 matcher 要做路由回归,避免静态资源 404、API 被错误重写或缓存 key 混乱。

可直接背诵的 30 秒回答

text
Proxy 是请求入口的轻量决策层,适合做 matcher、重定向、rewrite、locale、实验分流和登录态初筛;它不替代页面或 API 的资源授权,也不适合数据库事务和长耗时任务。实现时要考虑 Edge/Node 能力、matcher 排除范围、开放重定向、缓存影响和日志脱敏。

扩展知识

Proxy、Route Handler、Server Action

  • Proxy:请求入口决策。
  • Route Handler:HTTP API/流响应边界。
  • Server Action:服务端 mutation 调用边界。
  • 三者都必须在业务数据层重新鉴权。

面试官追问链

追问一:只在 Proxy 判断登录够不够?

  • 考察点:安全边界。
  • 回答方向:不够。直接访问 API、缓存命中、内部调用和竞态都可能绕过页面,资源授权要靠服务端数据层。

追问二:为什么 matcher 配错会导致图片加载失败?

  • 考察点:请求范围。
  • 回答方向:Proxy 可能处理静态资源或内部路径并改变响应;应明确排除静态文件和构建资源,并覆盖真实请求矩阵。
  • 考察点:缓存一致性。
  • 回答方向:可以,但要让实验维度进入缓存 vary/key,避免不同用户拿到同一实验结果,并控制 cookie 体积和隐私。

推荐阅读

基于 MIT 协议开源