Performance "Add Expires headers"

WRInaute discret
Bonjour à tous,

Voilà je travaille sur la perf de mon site, et plusieurs outils dont Yslow me préconise "Add Expires headers"
Notamment sur mon css.

Sachant que j'uilise combine.php (rakaz.nl/code/combine) afin de rduire le nombre de requete ce qui me permet d'appeler
ndd.com/example/css1.css,css2.css

J'ai donc chercher dans le fameux fichier combine.php
header('Expires: '.date(DATE_RFC822,strtotime("+1 month")));

Ce qui me permet d'avoir un "Expires: Fri, 24 Dec 10 15:05:06 +0100" dans mon header.

Cependant Yslow me dit toujours "Add Expires headers"

Et j'ai le même souci sur un script qui genere des miniature à la volée, qui n'avais d'Expire dans son Header, à qui je l'ai rajouter, et Yslow me dis toujours "Add Expires headers"?

Auriez vous une idée?
 
WRInaute passionné
tu as quoi exactement comme header au complet ? Tu en as peut-être un autre qui bloque.
Perso, j'utilise la date en GMT.
Tu peux tenter aussi un :
Cache-Control: max-age=1296000
d'un mois bien entendu (enfin correspondant à ta durée).
Voilà mon header pour mon site "pro" pour une image :
Code:
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Expires: Thu, 09 Dec 2010 14:23:34 GMT
Expires: Thu, 09 Dec 2010 14:23:34 GMT
< Cache-Control: max-age=1296000
Cache-Control: max-age=1296000
< Content-Type: image/x-icon
Content-Type: image/x-icon
< Accept-Ranges: bytes
Accept-Ranges: bytes
< ETag: "3762280382"
ETag: "3762280382"
< Last-Modified: Mon, 21 Jun 2010 11:31:42 GMT
Last-Modified: Mon, 21 Jun 2010 11:31:42 GMT
< Content-Length: 15086
Content-Length: 15086
< Date: Wed, 24 Nov 2010 14:23:34 GMT
Date: Wed, 24 Nov 2010 14:23:34 GMT
 
WRInaute discret
Je te remercie àprès avoir comparer nos deux header, et une différence m'a sauter au yeux.
Cache-Control: private

Du coup je l'ai passé comme toi et ca semble être bon...

je te remercie.
Tu utilise etag?
car on lit à pas mal d'endroit qu'il faut mieux le faire saute.?
 
WRInaute passionné
etag est plus au norme, mais oblige plus de vérification.
l'Etag est obtenu sur la date de modification du fichier (donc fait doublon avec l'header Last-Modified) (fonction stat généralement de l'OS).
C'est principalement pour défoncer les caches navigateurs qui vérifient "mal" justement.
Si tu dis à un navigateur "j'expire dans 1 mois", le navigateur n'a aucun intérêt d'aller vérifier si ton URL a changé (aussi bien au niveau des headers par exemple).
Enfin bon, c'est pas pareil pour tous les navigateurs, moi c'est principalement parce que je suis un geek que je l'ai rajouté, par défaut lighttpd ne le mets pas ;)
 
WRInaute impliqué
etag ne sert plus à rien si un expire header est ajouté.

Pour rappel concernant le fonctionnement d'etag :
au premier chargement, le fichier exemple.css est chargé avec un etag égal à 1 (en vérité ce n'est pas 1 mais plutot le md5 du fichier).
à chaque fois que le navigateur a besoin de concat.css (changement de page, rechargement de la page), il va indiquer qu'il possède déjà la version etag 1, si bien que si le fichier concat.css n'a pas changé, le serveur va renvoyer une réponse courte comme quoi le fichier n'a pas changé, au lieu de renvoyer le même fichier. Gros problème des Etags : il génère quand même une (petite) requête à chaque page, et pour chaque fichier déjà en cache dans le navigateur!
 
WRInaute accro
La spec HTTP précise bien que le format de la date doit être en RFC 1123 et forcément en GMT. Tu dois donc utiliser gmdate et pas date, et le format suivant si j'en crois les commentaires dans la doc de gmdate(): 'D, d M Y H:i:s \G\M\T'.

Jacques.
 
WRInaute discret
voiçi le résultat
Date: Thu, 25 Nov 2010 01:51:47 GMT
Server: Apache
Expires: Sat, 25 Dec 2010 01:51:47 GMT
Cache-Control: max-age=1296000
Last-Modified: Fri, 22 Oct 2010 08:41:25 GMT
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: image/jpeg
 
Discussions similaires
Haut