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

Next.js 13:如何解决网站会话后出现的JSON缓存异常问题

Next.js 13.3.0(App Router)部署AWS Amplify后,长时间返回标签页显示JSON内容的问题

环境信息

  • Next.js版本:^13.3.0
  • React版本:18.2.0
  • Next.js核心配置:
experimental: {
    appDir: true,
    isrMemoryCacheSize: 0,
}
  • 部署环境:AWS Amplify,采用生产环境默认构建配置

问题描述

网站标签页打开一段时间(如1小时)或会话结束后返回时,页面会显示JSON内容,该问题在移动端和PC端Chrome浏览器均会出现。已尝试设置isrMemoryCacheSize: 0清除缓存,但问题仍存在。


解决方案

1. 调整AWS Amplify缓存策略

AWS Amplify默认CDN缓存规则可能误缓存动态路由的JSON响应:

  • 进入Amplify控制台,找到目标应用,进入App settings > Hosting > Rewrites and redirects
  • 添加或修改缓存规则:
    • 路径匹配/*
    • 缓存行为设置为CacheDisabled,或设置短TTL(如60秒)
    • 确保响应头Content-Type强制为text/html,避免浏览器识别为JSON

2. 针对路由禁用ISR缓存

如果页面不需要增量静态再生(ISR),直接在对应路由组件中添加:

export const revalidate = 0; // 强制每次请求重新生成页面,禁用ISR缓存

优先针对出现问题的路由单独设置,避免全局禁用影响性能。

3. 检查App Router响应格式

排查服务器组件中是否存在错误返回JSON的情况:

  • 确保generateMetadata、generateStaticParams等函数逻辑正常,未意外输出JSON内容
  • 确认页面组件返回的是JSX结构,而非JSON对象

4. 强制浏览器不缓存页面

在根布局中添加缓存控制元标签,阻止浏览器缓存页面内容:

export default function RootLayout({ children }) {
  return (
    <html lang="zh-CN">
      <head>
        <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
        <meta http-equiv="Pragma" content="no-cache" />
        <meta http-equiv="Expires" content="0" />
      </head>
      <body>{children}</body>
    </html>
  );
}

5. 升级Next.js版本

Next.js 13.3.0属于App Router早期版本,存在缓存相关已知bug。建议升级至13.4+稳定版本,官方已修复大量路由和缓存异常问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 07:55:12