Avatar billede Mik2000 Professor
11. november 2018 - 13:09 Der er 3 kommentarer og
3 løsninger

Expire headers

Hej
Ved det sikkert er forkerte kategori, men vidste ikke lige hvor det skulle ind.

Kan man:
1: Sørge for exire headers ikke er aktive når jeg kører lokalt domæne f.eks. minside.test?

2: Lave expire headers der er sat forskelligt fra fil til fil sådan så nogle billeder har længere og nogle kortere (hvor de stadig kan ligge i samme mappe)?

3: Kan man kun sætte dem i htaccess filen eller kan det også sættes med f.eks. tag/attributter?

Spørgsmål omkring måden det fungerer
4: Hvis man sætter en expire header til f.eks. 10 dage, og man alligevel ændrer et billede efter 5 dage, hvad sker der så?
... og kan man så på nogen måde tvinge en update igennem hos brugerne?
Avatar billede Slater Ekspert
11. november 2018 - 13:30 #1
1. Kommer an på hvor de headers bliver sat og af hvad. Det er du nok lige nødt til at uddybe.

2. Ja. Men hvordan kommer stadig an på hvad du bruger til at sætte headers, og hvad kriterierne er for denne forskel.

3. Det kan sættes mange steder.

4. Så sker der det at alle der har cachet filen ser den gamle i de næste 5 dage, indtil de 10 dage udløber. Det er ulempen ved Expires. Hvis du vil have muligheden for at opdatere filen og få ændringer til at slå igennem med det samme, skal du bruge ETags caching i stedet for Expires.
Avatar billede Mik2000 Professor
12. november 2018 - 12:38 #2
Tak for svar. Kender ikke så meget til det. Men skal egentlig bare sikrer det bliver bedst muligt SEO mæssigt, og alle værktøjer fortæller mig det tæller ned at der ikke er sat expire headers.

Mit problem var så at jeg har nogle billeder som skiftes ofte og nogle som næsten aldrig skiftes. Ligeledes vil nogle js filer være de samme længe, mens andre ofte opdateres.
Min anden tanke var at hvis jeg havde sat noget til f.eks. 2 måneder, og der så blev behov for at opdaterer efter en måned, så kunne det give et problem.

Ift. ovenstående, hvad synes du så er smartest expire headers eller etags (og løser begge seo problemet)?

Lytter meget gerne til erfaring med det :)
Avatar billede Slater Ekspert
12. november 2018 - 13:13 #3
Altså, Expires er den performance-mæssigt bedste form for caching, men samtidig den mindste fleksible. Hvis du har sagt noget skal caches i f.eks. en måned, så vil alle se det i en måned efter deres sidste besøg, uanset om filen ændrer sig. Det er ofte et problem, men mht. ting man ved ikke ændrer sig (f.eks. third party libraries som jQuery og den slags), er det det letteste og bedste at bruge.

ETags er mere fleksible, men ikke helt så effektivt. Det virker ved at man sætter en Etag-header på filer/endpoints, som kan være næsten hvad som helst, men som regel er et hash af filens indhold. F.eks. Etag: 7110ed.
Når en bruger besøger det første gang, husker browseren det ETag, og næste gang man besøger det, sender browseren så et If-None-Match request med 7110ed til serveren. Serveren tjekker så om det hash har ændret sig, hvilket vil ske når filens indhold ændrer sig - og hvis den har ændret sig, bliver filen sendt igen. Hvis ikke, sendes i stedet en HTTP status 304 Not Modified uden noget indhold, hvorved browseren genbruger det gamle indhold, den havde gemt.

Som du nok har gættet, så betyder det at der stadig sendes et request til serveren, hvilket tager en smule tid. Forskellen er at filens indhold ikke sendes med hvis det ikke er unødvendigt. Derfor er ETags som sagt ikke helt så effektivt som Expires.


Det kunne give mening for dig at blande de to metoder. Sætte Expires på de ting der ikke ændrer sig, og bruge ETag til dem der ændrer sig. Begge bør få testværktøjer til at anerkende at det er cachet.


Der er dog en tredje, low-tech mulighed, der er lige så hurtig som Expires og lige så fleksibel som ETags, men kræver lidt mere arbejde fra din side: simpelthen at ændre URL'en til de ændrede filer. Hvis en fil hedder noget andet end sidste gang, vil den blive opfattet som en ny fil af browseren og dermed downloadet igen, uanset hvor lang en Expires header der var på den før.

Du behøver ikke at ændre selve filnavnet, men bare URL'en der peger på den, hvilket nemmeste gøres ved at tilføje en query string. F.eks.:
<script src="/folder/file.js?version=2"></script>
Og hver gang du ændrer filen, opdaterer du 2 til 3, næste gang til 4 osv. Hvis du benytter et server-side sprog, kan du endda få det til at gøre det automatisk.
Avatar billede Mik2000 Professor
12. november 2018 - 18:13 #4
Tak for svar endnu engang. Det sidste lyder som en fin løsning

Bare lige for at være helt sikker. Hvis jeg f.eks. ligger følgende i htaccess fil:
## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType text/x-javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresDefault "access plus 2 days"
</IfModule>
## EXPIRES CACHING ##

Og så blot har f.eks.
<img src="images/image.jpg?ver=1">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js?ver=1"></script>
<script src="/js/mitplugin.min.js?ver=1"></script>

Så kan jeg blot ændre tallet, og så er de ikke længere i cache?
Avatar billede Slater Ekspert
12. november 2018 - 19:03 #5
Korrekt. Eller for at være nøjagtig, så er den gamle fil stadig cached, men eftersom browseren opfatter det nye link som en ny fil, vil den hente den igen og benytte den i stedet. Det kan du gøre så mange gange du vil.
Avatar billede Mik2000 Professor
14. november 2018 - 15:57 #6
Super - mange tak for hjælpen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester