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

Angular PWA访问/index.html离线可用,访问/报错504求助

问题分析与解决方案

核心问题是Angular Service Worker(NGSW)未将根路径 / 的请求映射到已缓存的 /index.html,导致离线刷新时无法命中缓存,触发504错误。以下是针对性的解决步骤:

1. 更新ngsw-config.json缓存规则

在assetGroups的app资源组中,将根路径 / 添加到files数组,确保NGSW缓存根路径请求对应的响应:

{
  "$schema": "./node_modules/@angular/service-worker/config/schema.json",
  "index": "/index.html",
  "assetGroups": [
    {
      "name": "app",
      "installMode": "prefetch",
      "resources": {
        "files": [
          "/", // 新增根路径
          "/favicon.ico",
          "/index.html",
          "/manifest.webmanifest",
          "/*.css",
          "/*.js"
        ]
      }
    },
    // 其余配置保持不变
  ]
}

2. 验证缓存条目

修改配置后重新构建并部署应用,通过浏览器DevTools的Application > Cache Storage > ngsw-cache查看:

  • 确认存在/和/index.html两个缓存条目
  • 检查两个条目的响应内容是否一致(均为index.html的内容)

3. 额外排查点

  • 确认Service Worker已正确激活:在Application > Service Workers中检查SW处于activated状态,无更新错误
  • 清除旧缓存:部署新版本前,手动清除浏览器旧缓存,避免旧SW规则干扰

原因说明

NGSW默认只会缓存files数组中明确列出的路径,虽然index属性指定了/index.html作为SPA入口,但根路径 / 并未被显式加入缓存列表,因此离线时SW无法匹配该请求,转而尝试网络请求导致504。添加/到缓存列表后,SW会将根路径请求映射到已缓存的index.html内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:56:03