Avatar billede kongknabe Nybegynder
14. august 2008 - 20:25 Der er 4 kommentarer og
1 løsning

Sætte "last modified" header giver problemer.

Hejsa...

Jeg har længe brugt den praksis at jeg samler alle mine CSS og JS filer i to dynamiske PHP filer for at minimere HTTP request til serveren. Problemet er dog at der ikke bliver sat en "last modified" header på dynamisk genererede filer og browseren vil derfor downloade både min style.php og script.php hvergang brugeren klikker sig rundt på siden frem for at benytte den version den har liggende i cachen.

Derfor har jeg forsøgt mig med manuelt at indsætte en header i disse to filer på følgende måde:

<?php
   
    header("Content-Type: text/javascript");
    header('Last-Modified: '.gmdate('Mon, 01 Jan 2007 00:00:00').' GMT');
   
    include('js/jquery-1.2.1.min.js');
    include('js/jscroller2-1.3.js');
    include('js/jquery.cycle.all.pack.js');
    include('js/swfobject.js');
    include('js/script.js');
?>

Problemet opstår når jeg tjekker headeren i f.eks. Safaris debugger, eller i Firebug. Af en eller anden grund kommer min "last modified" header til at se ud som følger:

Last-Modified: Augo8, 01 Jpm8 2007 00:00:00 GMT

- Der går med andre ord et eller andet galt med "D" og "M"!? - Så vidt jeg har læst mig frem ser formatet ud som følger: header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');

Hvad gør jeg galt?

------------------

Tillægsspørgsmål:

Når jeg tjekker hvilke headers jeg får tilbage fra serveren får jeg også en der lyder som følger:

Cache-Control: max-age=0

Nogle der har en ide om hvad det betyder?
Avatar billede coderdk Praktikant
14. august 2008 - 20:51 #1
header('Last-Modified: '.gmdate('Mon, 01 Jan 2007 00:00:00').' GMT');

skal naturligvis være

header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');

Som du selv skriver. Vil du have at den skal være 1/1 2007 så:

header('Last-Modified: '.gmdate('D, d M Y H:i:s', mktime( 0, 0, 0, 1, 1, 2007 ) ).' GMT');

Fra http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3

"max-age
    Indicates that the client is willing to accept a response whose age is no greater than the specified time in seconds. Unless max- stale directive is also included, the client is not willing to accept a stale response."
Avatar billede kongknabe Nybegynder
14. august 2008 - 21:02 #2
Hmm.. Når jeg ændrer det til det du skriver får jeg en header der ser ud som følger:

Last-Modified:Sun, 31 Dec 2006 23:00:00 GMT

Det er såmænd ganske fin, men kan ikke lige forstå det helt!?
Avatar billede coderdk Praktikant
14. august 2008 - 22:34 #3
mktime laver lokaltid, du skal nok bruge gmmktime så :)
Avatar billede kongknabe Nybegynder
14. august 2008 - 22:40 #4
Super.. så virker det.. Tusind tak!

Du skulle have fået point nu :)
Avatar billede coderdk Praktikant
15. august 2008 - 00:09 #5
Yes, takker :)
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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