Perf : en-têtes HTTP de cache pour les assets et les articles #18
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problème
Les assets statiques (CSS, JS, images) et les pages d'articles ne disposent d'aucun en-tête HTTP de cache. Le navigateur refetch tout à chaque navigation, même si rien n'a changé.
Localisation
public/index.php— aucun en-têteCache-Control/ETag/Last-Modifiedémisserver/apache/lan.acegrp.varlog.conf— pas de directiveExpiresActivenimod_headerspour les assetsSolution proposée
1. Assets statiques (Apache)
Dans la config Apache, ajouter des en-têtes longs pour les fichiers immuables :
Conditionné à l'ajout d'un fingerprint de version dans les URLs (
style.css?v=abc123) pour invalider le cache lors des mises à jour — sinonmax-agelong est dangereux.2. Pages articles (PHP)
Émettre
Last-ModifiedetETagbasés surfilemtime()deindex.md+meta.json, et répondre304 Not Modifiedsi le navigateur envoieIf-Modified-Since/If-None-Match.3. Fingerprinting des assets
Dans
layout.php, générer le hash du fichier CSS/JS pour le suffixer dans l'URL :Critères d'acceptation
Cache-Control: public, max-age=31536000avec fingerprint dans l'URLlayout.phpgénère les URLs d'assets avec hash de contenuLast-Modifiedet répondent304si rien n'a changéCache-Control: no-store)Migré depuis varlog#28