You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js路由处理器中如何获取请求的User-Agent?

解决Next.js路由处理器无法获取User-Agent的问题

问题根源

你设置了export const dynamic = "force-static";,这个配置会强制路由处理器在构建阶段静态生成,而非在用户请求时动态执行。构建阶段没有真实的用户请求上下文,自然无法获取到请求头中的User-Agent,所以本地测试时返回空或null;而部署到Vercel后,真实用户请求会触发动态执行逻辑,因此能拿到合法的User-Agent。

解决方案

1. 修改动态渲染配置

将dynamic配置改为支持动态执行的选项,确保路由处理器在每次请求时运行:

// 强制动态渲染,每次请求都执行处理器逻辑
export const dynamic = "force-dynamic";

也可以选择"auto"(Next.js自动判断是否静态生成),但force-dynamic能确保完全动态执行。

修改后的完整代码:

import { userAgent } from "next/server";
export const dynamic = "force-dynamic";
export async function GET(req: Request) {
  // 使用next/server提供的解析工具
  const parsedUa = userAgent(req);
  console.log(parsedUa);
  // 直接获取原始User-Agent字符串
  const rawUa = req.headers.get("User-Agent");
  console.log(rawUa);
  return Response.json({ error: false, message: "Hello, world!" });
}

2. 本地验证

重新运行项目后发送请求,就能正常打印出解析后的User-Agent结构,或者原始的User-Agent字符串。

补充说明

如果你的路由需要保留部分静态内容,同时又要获取实时请求头,增量静态再生(ISR)并不适用——因为ISR仍在构建/重新生成阶段执行,无法获取每次请求的实时头信息,这种场景下必须使用动态渲染。

内容的提问来源于stack exchange,提问作者tallphin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 14:17:04