Проблема:
Невозможно обработать 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. Это бесполезно для меня, так как мне нужны и база данных, и хранилище одновременно.