You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Angular6 Service Worker无法处理Firebase Storage URL(疑似CORS问题)

解决Angular 6 Service Worker无法处理Firebase Storage URL的CORS问题

你找对了方向——这个问题确实是CORS配置不匹配导致的,但你当前在firebase.json里配置的headers只对Firebase Hosting托管的资源生效,而Firebase Storage的资源是从独立的存储域名(比如storage.googleapis.com)加载的,所以这个配置根本没覆盖到Storage的请求。

下面是具体的解决步骤:

1. 直接配置Firebase Storage的CORS规则

你需要给Firebase Storage桶单独设置CORS规则,操作如下:

  • 创建一个名为cors.json的文件,内容可以参考下面的模板(建议把origin改成你的实际域名,而不是*,提升安全性):
    [
      {
        "origin": ["*"],
        "method": ["GET"],
        "maxAgeSeconds": 3600
      }
    ]
    
  • 打开终端,使用Firebase CLI(确保已安装并登录)执行以下命令,将配置上传到你的Storage桶:
    gsutil cors set cors.json gs://<你的存储桶名称>
    
    你的存储桶名称可以在Firebase控制台的Storage页面找到,格式一般是你的项目ID.appspot.com

2. 检查Service Worker的请求处理逻辑

如果你的Service Worker自定义了fetch事件处理,确保请求Firebase Storage资源时设置了mode: 'cors',示例代码:

self.addEventListener('fetch', (event) => {
  if (event.request.url.includes('storage.googleapis.com')) {
    event.respondWith(
      fetch(event.request, { mode: 'cors' })
        .then(response => {
          // 这里可以添加自定义缓存逻辑
          return response;
        })
    );
  }
});

3. 清除缓存验证效果

配置完成后,记得做以下操作确保生效:

  • 清除浏览器本地缓存
  • 在Chrome DevTools的Application > Service Workers页面,注销并重新加载Service Worker
  • 重新部署你的Angular应用到Firebase Hosting

这样应该就能解决Service Worker无法处理Firebase Storage URL的问题了。

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

火山引擎 最新活动