en en en da en en sv en en tr da da da da da ar en en sv fr en en en da de en en sv fr de de fr fr fr sv en en en eu en en en en en da da en da da en en sv fr de de fr fr fr sv en fr en ja fr en en en en en ru en en en en en en en en da en en sv fr de de fr fr fr sv en fr en ja fr de fr en en en en en en en en en es en en en en en en da da en en sv fr de de fr fr fr sv en fr en ja fr de fr es nb fr en en en en en en en en en en en en en en ru en en en en da da en en sv fr de de fr fr en en pt en mk kn kn en en en da en en sv fr de de fr fr fr sv en fr en ja fr de fr es nb fr de en en en en en en en en en en es en en en en en en en en en da en da da de da da sv da nb nb en da da da da en nl da sv da en
Apache, Varnish, Nginx og SPA app: Undgå at cache index.html – NerdGirl
Forbud fører sjældent noget godt med sig
(Last Updated On: 23. august 2019)
SPA står for “Single Page Application”, for den består fysisk kun af een side, nemlig index.html. Dvs. alt der har med brugerfladen at gøre hentes første gang hjemmesiden besøges, og herfra foregår al kommunikation via Ajax kald til en backend.
Inde i index.html filen er der referencer til alt det andet hjemmesiden skal bruge. Disse referencer indeholder ofte det vi kalder “cache busting”. Dvs. at når man har lavet ændringer, sørger man for at filnavne i  referencerne også ændrer sig. Dermed vil browseren tro at der er tale om nye filer, og hente dem påny, i stedet for at hente dem fra sit eget lager (cache).
Udfordringen opstår, når der er lavet ændringer og index.html nu refererer til nye filnavne. De gamle filer eksisterer ikke længere på serveren. Hvis index.html i det tilfælde hentes fra browserens cache, vil alle referencer pege på filer der ikke længere eksisterer.
Med en SPA er det derfor vigtigt at konfigurere både index.html og server, til at instruere browseren i IKKE at cache index.html.
I selve index.html tilføjes disse linjer i   sektionen:
I Apaches konfiguration tilføjes følgende:
FileETag None Header unset ETag Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" Header set Pragma "no-cache" Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
Du kan konstatere om det virker ved at hente filen med wget kommandoen:
Før jeg ændrede apache så wget’s output således ud:
HTTP request sent, awaiting response... HTTP/1.1 200 OK Date: Fri, 23 Aug 2019 09:31:06 GMT Server: Apache/2.4.7 (Ubuntu) Last-Modified: Thu, 22 Aug 2019 17:06:14 GMT ETag: "1353-590b7b5056d80" Accept-Ranges: bytes Content-Length: 4947 Vary: Accept-Encoding Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html Length: 4947 (4.8K) [text/html] Saving to: ‘index.html’
HTTP request sent, awaiting response...
Date: Fri, 23 Aug 2019 09:31:06 GMT
Last-Modified: Thu, 22 Aug 2019 17:06:14 GMT
Length: 4947 (4.8K) [text/html]
Efter genstart af Apache, ser det således ud:
HTTP request sent, awaiting response... HTTP/1.1 200 OK Date: Fri, 23 Aug 2019 09:33:19 GMT Server: Apache/2.4.7 (Ubuntu) Last-Modified: Thu, 22 Aug 2019 17:06:14 GMT Accept-Ranges: bytes Content-Length: 4947 Vary: Accept-Encoding Cache-Control: max-age=0, no-cache, no-store, must-revalidate Pragma: no-cache Expires: Wed, 11 Jan 1984 05:00:00 GMT Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html Length: 4947 (4.8K) [text/html] Saving to: ‘index.html.1’
HTTP request sent, awaiting response...
Date: Fri, 23 Aug 2019 09:33:19 GMT
Last-Modified: Thu, 22 Aug 2019 17:06:14 GMT
Cache-Control: max-age=0, no-cache, no-store, must-revalidate
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Length: 4947 (4.8K) [text/html]
I mit tilfælde sidder Apache imidlertid bag Varnish HTTP Cache og Nginx som proxy. Jeg tjekker derfor også lige om de nye no-cache headers kommer hele vejen gennem Varnish og Nginx til klienten. Denne gang afvikler jeg derfor wget kommandoen på min egen computer:
HTTP request sent, awaiting response... HTTP/1.1 200 OK Server: nginx/1.14.2 Date: Fri, 23 Aug 2019 10:17:50 GMT Content-Type: text/html Content-Length: 4947 Connection: keep-alive Last-Modified: Thu, 22 Aug 2019 17:06:14 GMT Vary: Accept-Encoding X-Cache-Policy: static-file Cache-Control: max-age=3600 X-Varnish: 774695 446141 Age: 2996 Via: 1.1 varnish (Varnish/6.1) ETag: W/"1353-590b7b5056d80-gzip" X-Cache-Status: Hit/44 X-Restarts: 0 Accept-Ranges: bytes X-Restarts: 0  Accept-Ranges: bytes Length: 4947 (4,8K) [text/html]
HTTP request sent, awaiting response...
Date: Fri, 23 Aug 2019 10:17:50 GMT
Last-Modified: Thu, 22 Aug 2019 17:06:14 GMT
Via: 1.1 varnish (Varnish/6.1)
X-Restarts: 0   Accept-Ranges: bytes Length: 4947 (4,8K) [text/html]
Desværre… det ser ud til at Varnish serverer index.html fra sin cache og ydermere mangler ‘no-cache’ som den bagvedliggende Apache ellers sender med.
I Varnish dokumentation læser jeg mig til følgende ændring:
# /etc/varnish/default.vcl sub vcl_recv { if (req.url ~ "^/index\.html" || req.url ~ "^/$") { return(pass); } }
if (req.url ~ "^/index\.html" || req.url ~ "^/$") {
# systemctl reload varnish
# systemctl reload varnish
Efter genstart af Varnish ser headerne nu således ud:
HTTP request sent, awaiting response... HTTP/1.1 200 OK Server: nginx/1.14.2 Date: Fri, 23 Aug 2019 10:41:38 GMT Content-Type: text/html Content-Length: 4947 Connection: keep-alive Last-Modified: Thu, 22 Aug 2019 17:06:14 GMT Accept-Ranges: bytes Vary: Accept-Encoding Pragma: no-cache Expires: Wed, 11 Jan 1984 05:00:00 GMT X-Cache-Policy: static-file Cache-Control: max-age=3600 X-Varnish: 219540 Age: 0 Via: 1.1 varnish (Varnish/6.1) X-Cache-Status: Miss X-Restarts: 0 Length: 4947 (4,8K) [text/html]
HTTP request sent, awaiting response...
Date: Fri, 23 Aug 2019 10:41:38 GMT
Last-Modified: Thu, 22 Aug 2019 17:06:14 GMT
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Via: 1.1 varnish (Varnish/6.1)
Length: 4947 (4,8K) [text/html]
Jeg ville også gerne have set en Cache-Control: no-cache, men det må være Nginx der driller.
Posted in Server, Webudvikling Tagged angular, apache, cache, index, spa
Kan ikke redigere privilegier i phpMyAdmin
I gang med Angular 13 på Linux
Brug af grep kommandoen
Installer Asbru Connection Manager på Fedora
Installer DBeaver på Fedora
Node Package Manager (npm)
Linux: Afvikle en kommando som en anden bruger
MariaDB: Slå generel log til midlertidigt
Udskift nouveau driver med NVIDIA på Fedora 33 – og fortryd
Skab overblik over dine DMARC rapporter
Kategorier Vælg kategori Aftensmad Akrylmaling Bagværk Computer Dessert Fotografi Generelt Grød Hakket oksekød Hobby Hvidkål Ikke kategoriseret Internet IT Krop og sind PHP Pizza Politik Samfund Server Tips & Tricks Vegansk Webudvikling
Arkiver Vælg måned august 2022 april 2022 marts 2022 oktober 2021 maj 2021 marts 2021 februar 2021 januar 2021 december 2020 november 2020 oktober 2020 august 2020 juli 2020 juni 2020 marts 2020 januar 2020 december 2019 november 2019 oktober 2019 august 2019 juni 2019 april 2019 februar 2019 december 2018 oktober 2018 september 2018 juli 2018 juni 2018 maj 2018 april 2018 februar 2018 januar 2018 december 2017 oktober 2017 september 2017 august 2017 juli 2017 juni 2017 maj 2017 april 2017 januar 2017 december 2016 november 2016 oktober 2016 september 2016 januar 2016 december 2015 november 2015 oktober 2015 september 2015
Proudly powered by WordPress | Theme: chichi by xtianmark.