PJvanDiepen / COOLbackend

Web app for 0-0-0.nl and 0-0-0.app
MIT License
0 stars 1 forks source link

Naijlen op internet #29

Closed PJvanDiepen closed 1 month ago

PJvanDiepen commented 9 months ago

Als een nieuwe versie van 0-0-0 op de server staat, blijven in de cache van browsers van gebruikers nog oude versies van html, css en javascript bestanden hangen.

Een gebruikelijke oplossing is om versies in de namen van die bestanden te zetten, maar dat gaat al fout in index.html. Bovendien is het veel werk voor de ontwikkelaar.

Ik zoek een oplossing waarbij 0-0-0 constateert dat er een nieuwe versie is en dan de cache wist, zodat de gebruikers altijd de meest recente versies van de html, css en javascript bestanden krijgen.

nootr commented 1 month ago

Is het een optie om een versienummer (of mooier: een hash van de betreffende file) als query toe te voegen? https://stackoverflow.com/a/32427

PJvanDiepen commented 1 month ago

Ik hoop dat er een eenvoudiger oplossing is dan met versienummers of een hash per bestand.

Is het mogelijk om in JavaScript een hard refresh van de browser cache te doen voor 0-0-0.nl? Zo ja, dan kan 0-0-0 bepalen of zo'n hard refresh nodig is.

Ten eerste wordt de server opnieuw gestart als er een nieuwe versie is. 0-0-0 kan opvragen wat de laatste versie is en hoe lang die draait. Zie Systeembeheer. Indien de server kort geleden is gestart, is het een goed moment voor een hard refresh.

Ten tweede kan 0-0-0 opvragen met welke versie, de gebruiker de laatste mutatie heeft gedaan. Indien dat niet de laatste versie is, is het misschien ook een goed moment coor een hard refresh.

Uiteraard kan de gebruiker ook zelf een hard refresh doen, maar de instructies zijn voor elke browser verschillend: Chrome, Safari, FireFox, Android of iPhone. Daarom is het handig om het in JavaScript te doen. Een menu-item op een html-pagina is misschien de meest eenvoudige oplossing.

nootr commented 1 month ago

Voor zover ik weet is een hard refresh d.m.v. JS niet zomaar te doen, ik kan alleen iets vinden wat voor Firefox werkt, maar dat wil je dus niet. Ik ben benieuwd of ik iets over het hoofd zie.

De nette manier is het meegeven van een Cache-Control HTTP header, maar ik weet niet wat voor configuratie er nodig is voor de webserver om dit te doen. Misschien dat er dan een NGINX reverse proxy nodig is, maar ik weet niet of je dat zomaar wilt doen zonder IaC.

Daarom leek een versienummer in de query mij een goed idee. Je zegt dat de webserver al data heeft over wanneer de server is opgestart, is die timestamp desnoods niet te gebruiken als query? Ik ben benieuwd welke uitdagingen je voor ogen hebt op deze manier. Als de URL query op veel plekken toegevoegd moet worden, kun je misschien een functie schrijven die een URL als argument neemt en het importeren met query dan regelt o.i.d.?

PJvanDiepen commented 1 month ago

Het gaat om de werking van cache in de browser (van allerlei verschillende apparaten) voor wat betreft html-, css- en js-bestanden.

1. Hoe kan een query met een versienummer zorgen dat die bestanden opnieuw van de server worden gehaald? Hoe gaat het bijvoorbeeld met index.html?

2. En indien punt 1 goed lukt: blijft de browser daarna steeds die bestanden opnieuw van de server halen? Of werkt de cache weer gewoon?

PJvanDiepen commented 1 month ago

Cache-Control in de HTTP header ziet er interessant uit. Op de server draait nginx. Wat kunnen we proberen?