Angular Service Worker 无法在 Firebase 存储上缓存图像,导致 504(网关超时)

Par*_*oos 5 firebase-storage angular angular-service-worker

我无法让 Angular Service Worker 缓存存储在 Firebase Storage 上的图像,以便它们在离线模式下可用。

我正在使用 angular 7.2.0,在 Windows 机器上的本地主机上运行。

要重现,请执行以下操作。

  1. 将图像上传到 Firebase 存储并记下下载 URL。
  2. 在 PowerShell 中运行以下命令
ng new my-project --service-worker
cd .\my-project\
ng add @angular/pwa --project my-project
Run Code Online (Sandbox Code Playgroud)
  1. 编辑src/app/app.component.html
<img src="https://upload.wikimedia.org/wikipedia/en/a/a9/Example.jpg">
<img src="https://firebasestorage.googleapis.com/v0/b/{firebase project}.appspot.com/o/{image}.jpg?alt=media&token={token}">
Run Code Online (Sandbox Code Playgroud)
  1. 下面加入src/ngsw-config.json
    "dataGroups": [
      {
        "name": "photos",
        "urls": [
          "https://firebasestorage.googleapis.com/**/*.jpg*",
          "https://upload.wikimedia.org/**/*.jpg"
        ],
        "version": 1,
        "cacheConfig": {
          "maxSize": 1000,
          "maxAge": "10d",
          "timeout": "3s",
          "strategy": "performance"
        }
      }
    ]
Run Code Online (Sandbox Code Playgroud)
  1. 回到powershell,运行:
ng build --prod
http-server -p 8080 -c-1 dist/my-project
Run Code Online (Sandbox Code Playgroud)
  1. http://localhost:8080/在 Chrome 中打开并查看显示的两个图像 OK。
  2. 关闭互联网访问或在 DevTools 中离线。
  3. http://localhost:8080/在 Chrome 中打开。维基媒体图像由服务工作者提供,但未显示 firebase 图像。

我希望 wikimedia 图像和 firebase 托管图像都已被 service worker 缓存并显示,但只有 wikimedia 图像已被缓存。Firebase 无法加载,出现 504 Gateway Timeout 错误。查看此图片了解我在 Chrome 开发工具中看到的内容。

DevTool 显示我得到的错误