У меня есть прогрессивное веб-приложение. Я использую Google Fonts и использую workbox в своем сервисном работнике.
Моя политика безопасности контента определяется как:
// Omitting all the other directives
style-src 'self' https://fonts.googleapis.com 'unsafe-inline';
font-src 'self' https://fonts.gstatic.com;
connect-src 'self';
Я настроил рабочую коробку для кэширования шрифтов, следуя рецепту здесь . Код выглядит так:
workbox.routing.registerRoute(
/^https:\/\/fonts\.googleapis\.com/,
new workbox.strategies.StaleWhileRevalidate({
cacheName: 'google-fonts-stylesheets',
})
);
workbox.routing.registerRoute(
/^https:\/\/fonts\.gstatic\.com/,
new workbox.strategies.CacheFirst({
cacheName: 'google-fonts-webfonts',
plugins: [
new workbox.cacheableResponse.Plugin({
statuses: [0, 200],
}),
new workbox.expiration.Plugin({
maxAgeSeconds: 60 * 60 * 24 * 365,
maxEntries: 30,
}),
],
})
);
Проблема в том, что при попытке загрузить мое приложение в браузере (Google Chrome / Safari) или в автономном приложении шрифт не загружается. После многих моментов, вызывающих утомление волос, Chrome наконец-то выдал мне ошибку в консоли:
Refused to connect to 'https://fonts.googleapis.com/css?family=Montserrat|Quicksand&display=swap' because it violates the following Content Security Policy directive: "connect-src 'self'".
Uncaught (in promise) no-response: no-response :: [{"url":"https://fonts.googleapis.com/css?family=Montserrat|Quicksand&display=swap","error":{}}]
at o.makeRequest (https://storage.googleapis.com/workbox-cdn/releases/4.2.0/workbox-strategies.prod.js:1:3983)
GET https://fonts.googleapis.com/css?family=Montserrat|Quicksand&display=swap net::ERR_FAILED
Похоже, мне нужно также объявить шрифты Google под connect-src
. Я не видел нигде упомянутого (и много гуглял), поэтому я хотел знать, если это ошибка, или мне действительно нужно определить шрифт в директиве connect-src
CSP?