Кэш-память NGSW Firebase Storage - firebase


1

Проблема:

Невозможно обрабатывать URL-адреса памяти Firebase в службе обслуживания Angular6 (предположительно, из-за CORS).

firebase.json

{
  "hosting": {
    "public": "dist",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ],
    "headers": [ {
      "source" : "**/*[email protected](eot|otf|ttf|ttc|woff|font.css)",
      "headers" : [ {
        "key" : "Access-Control-Allow-Origin",
        "value" : "*"
      } ]
      }, {
      "source" : "**/*[email protected](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 "на запрошенном ресурсе. Следовательно, Origin my_app_domain не имеет доступа. Если непрозрачный ответ отвечает вашим потребностям, установите режим запроса "no-cors" для извлечения ресурса с отключенным CORS ". и когда я перезагружаю приложение, никакие ресурсы хранилища Firebase не загружаются.

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

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

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

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

ОБНОВИТЬ

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

Источник
  •  66
  •  0
  • 4 мар 2020 2020-03-04 05:33:00

Ответов пока нет