NGSW кеширует Firebase Storage - PullRequest
0 голосов
/ 09 мая 2018

Проблема:

Невозможно обработать URL-адреса хранилища Firebase в сервисном работнике Angular6 (предположительно из-за CORS).

firebase.json

{
  "hosting": {
    "public": "dist",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ],
    "headers": [ {
      "source" : "**/*.@(eot|otf|ttf|ttc|woff|font.css)",
      "headers" : [ {
        "key" : "Access-Control-Allow-Origin",
        "value" : "*"
      } ]
      }, {
      "source" : "**/*.@(jpg|jpeg|gif|png)",
      "headers" : [ {
        "key" : "Cache-Control",
        "value" : "max-age=7200"
      } ]
      }, {
      "source" : "404.html",
      "headers" : [ {
        "key" : "Cache-Control",
        "value" : "max-age=300"
      } ]
    } ]
  }
}

ngsw-conf.json

{
  "index": "/index.html",
  "assetGroups": [{
    "name": "app",
    "installMode": "prefetch",
    "resources": {
      "files": [
        "/apple-touch-icon-precomposed.png",
        "/apple-touch-icon.png",
        "/favicon.ico",
        "/index.html",
        "/*.css",
        "/*.js"
      ]
    }
  }, {
    "name": "assets",
    "installMode": "lazy",
    "updateMode": "prefetch",
    "resources": {
      "files": [
        "/assets/**"
      ],
    "urls": [
      "https://fonts.googleapis.com/**",
      "https://firebasestorage.googleapis.com/**"
    ]
    }
  }],
  "dataGroups": [{
      "name": "api-performance",
      "urls": [
        "/some_route"
      ],
      "cacheConfig": {
        "strategy": "performance",
        "maxSize": 100,
        "maxAge": "3d"
      }
    }
  ]
}

Все файлы были загружены в хранилище Firebase со следующими метаданными:

{
  cacheControl: 'public,max-age=36000',
  contentType: 'image/jpeg'
}

Когда я загружаю приложение в Chrome или Opera, приложение отображается нормально, но я получаю сообщение об ошибке «Не удалось загрузить some_firebase_storage_download_link : В запрошенном заголовке« Access-Control-Allow-Origin »нет» ресурс. Происхождение my_app_domain не разрешено. Если непрозрачный ответ отвечает вашим потребностям, установите режим запроса «no-cors», чтобы получить ресурс с отключенным CORS. и когда я перезагружаю приложение, ресурсы Firebase Storage не загружаются.

Когда я загружаю приложение в Safari или Edge, приложение не отображается вообще, и я получаю несколько консольных ошибок «Не удалось загрузить ресурс».

Приложение обрабатывается и кэшируется в Firefox без каких-либо проблем.

Когда я опускаю Firebase Storage и использую только ресурсы в Firebase Hosting, приложение кэшируется без ошибок во всех браузерах.

Я искал для установки режима запроса 'no-cors', но не смог найти решения относительно моей проблемы.

UPDATE

Это может быть вызвано вмешательством обработчика персистентности NGSW и Firebase Firestore (например: firebase.firestore (). EnablePersistence ();). Я не уверен, как именно работает постоянство Firebase Firestore, но когда я инициализирую приложение без сохранения Firestore, я могу кэшировать динамические ссылки из Firebase Storage. Это бесполезно для меня, так как мне нужны и база данных, и хранилище одновременно.

...