Ik heb een service worker waarin ik met Workbox een hoop asset URLs precache. Deze asset URLs bevinden zich op een ander domein dan de service worker (CDN), en zijn dus cross origin requests.
Dit werkt allemaal prima eens in productie, maar vanaf localhost er bij komt kijken in mijn development omgeving lijkt het helemaal fout te lopen.
Bij het installeren van de service worker, loopt het precachen vast op CORS errors. Chrome zegt dat er geen "Access-Control-Allow-Origin" header aanwezig is in de response van de server. In dit geval is de server simpelweg een publieke S3 bucket met de volgende CORS policy:
Alle tests met Postman en Chrome console tonen mij dat de juiste CORS headers aanwezig zijn, en de requests slagen dan ook zonder problemen. Vreemd.
Na wat verder testen met de service worker blijkt dat niet per se alle precache requests falen, sommige requests slagen zonder enige problemen. Voor alle duidelijkheid: dit zijn requests die niet eerder gecached zijn, dus daar kan het niet aan liggen:
:fill(white):strip_exif()/f/image/itFrZEwwTEFnHD4vWiHaZYbs.png?f=user_large)
/f/image/humlcmd1NB1lNwV9pHYFlnxh.png?f=fotoalbum_large)
Verder heb ik ook het volgende patroon kunnen vaststellen: Als een precache request faalt, dan faalt dezelfde request manueel vanuit de console ook. Als er eerder geen precache request gebeurd is voor een specifieke URL, dan lukt het wel gewoon manueel vanuit de console. De browser cache wissen, zorgt er voor dat alle falende requests gewoon terug manueel lukken:
/f/image/UgivjAtofbTVj95J6Ac80Srx.png?f=fotoalbum_large)
Mis ik hier iets? Zijn er andere regels voor CORS binnen service workers? Tot zo ver ik weet zou localhost geen invloed mogen hebben op cross origin requests, toch?
Dit werkt allemaal prima eens in productie, maar vanaf localhost er bij komt kijken in mijn development omgeving lijkt het helemaal fout te lopen.
Bij het installeren van de service worker, loopt het precachen vast op CORS errors. Chrome zegt dat er geen "Access-Control-Allow-Origin" header aanwezig is in de response van de server. In dit geval is de server simpelweg een publieke S3 bucket met de volgende CORS policy:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| [ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ "HEAD", "GET" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [] } ] |
Alle tests met Postman en Chrome console tonen mij dat de juiste CORS headers aanwezig zijn, en de requests slagen dan ook zonder problemen. Vreemd.
Na wat verder testen met de service worker blijkt dat niet per se alle precache requests falen, sommige requests slagen zonder enige problemen. Voor alle duidelijkheid: dit zijn requests die niet eerder gecached zijn, dus daar kan het niet aan liggen:
:fill(white):strip_exif()/f/image/itFrZEwwTEFnHD4vWiHaZYbs.png?f=user_large)
/f/image/humlcmd1NB1lNwV9pHYFlnxh.png?f=fotoalbum_large)
Verder heb ik ook het volgende patroon kunnen vaststellen: Als een precache request faalt, dan faalt dezelfde request manueel vanuit de console ook. Als er eerder geen precache request gebeurd is voor een specifieke URL, dan lukt het wel gewoon manueel vanuit de console. De browser cache wissen, zorgt er voor dat alle falende requests gewoon terug manueel lukken:
/f/image/UgivjAtofbTVj95J6Ac80Srx.png?f=fotoalbum_large)
Mis ik hier iets? Zijn er andere regels voor CORS binnen service workers? Tot zo ver ik weet zou localhost geen invloed mogen hebben op cross origin requests, toch?