diff --git a/dist/style_prive.html b/dist/style_prive.html index e5356a5c98c94432dc3d4f618123ee77900854e0..799cdcc2c372e6bdca0922412d15e6d6b65a4ff9 100644 --- a/dist/style_prive.html +++ b/dist/style_prive.html @@ -10,7 +10,7 @@ ATTENTION: il faut absolument le charset sinon Firefox croit que c'est du text/html ! ] -#CACHE{360*1000} +#CACHE{3600*100,cache-client} #HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15} #HTTP_HEADER{Vary: Accept-Encoding} body { diff --git a/ecrire/public/assembler.php b/ecrire/public/assembler.php index 54609700fe4a39b9e84c5ab9246b700615d048ad..bed6ee08f532e9fc0621be7d56db2c272e8becbe 100644 --- a/ecrire/public/assembler.php +++ b/ecrire/public/assembler.php @@ -95,20 +95,21 @@ function assembler_page ($fond) { $headers_only = ($_SERVER['REQUEST_METHOD'] == 'HEAD'); - // une perennite valide a meme reponse qu'une requete HEAD - - if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) AND !$var_mode - AND $chemin_cache AND !$flag_dynamique - // l'admin connecte veut voir ses boutons a jour - AND (!$_COOKIE['spip_admin'] OR (_request('var_fragment')!==null))) { - if (!strstr('IIS/', $_SERVER['SERVER_SOFTWARE'])) { - $since = preg_replace('/;.*/', '', - $_SERVER['HTTP_IF_MODIFIED_SINCE']); - $since = str_replace('GMT', '', $since); - if (trim($since) == gmdate("D, d M Y H:i:s", $lastmodified)) { - $page['status'] = 304; - $headers_only = true; - } + // Pour les pages non-dynamiques (indiquees par #CACHE{duree,cache-client}) + // une perennite valide a meme reponse qu'une requete HEAD (par defaut les + // pages sont dynamiques) + if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) + AND !$var_mode + AND $chemin_cache + AND !$flag_dynamique + AND !strstr('IIS/', $_SERVER['SERVER_SOFTWARE']) + ) { + $since = preg_replace('/;.*/', '', + $_SERVER['HTTP_IF_MODIFIED_SINCE']); + $since = str_replace('GMT', '', $since); + if (trim($since) == gmdate("D, d M Y H:i:s", $lastmodified)) { + $page['status'] = 304; + $headers_only = true; } } diff --git a/ecrire/public/balises.php b/ecrire/public/balises.php index adc4c99866dd12948905e3df34c9ae737d0cb20f..d9119f38011b912051477134ad82901ea1bed7cd 100644 --- a/ecrire/public/balises.php +++ b/ecrire/public/balises.php @@ -1211,6 +1211,8 @@ function balise_HTTP_HEADER_dist($p) { // #CACHE // definit la duree de vie ($delais) du squelette // #CACHE{24*3600} +// parametre(s) supplementaire(s) : +// #CACHE{24*3600, cache-client} autorise gestion du IF_MODIFIED_SINCE // http://doc.spip.org/@balise_CACHE_dist function balise_CACHE_dist($p) { $duree = valeur_numerique($p->param[0][1][0]->texte); @@ -1220,18 +1222,25 @@ function balise_CACHE_dist($p) { . $duree . '"); ?'.'>\''; - // remplir le header Cache-Control - if ($duree > 0) - $p->code .= '.\'<'.'?php header("Cache-Control: max-age=' - . $duree - . '"); ?'.'>\''; - else + // Remplir le header Cache-Control + // cas #CACHE{0} + if ($duree == 0) $p->code .= '.\'<' .'?php header("Cache-Control: no-store, no-cache, must-revalidate"); ?' .'><' .'?php header("Pragma: no-cache"); ?' .'>\''; + // cas #CACHE{360, cache-client} + if (isset($p->param[0][2])) { + $second = ($p->param[0][2][0]->texte); + if ($second == 'cache-client' + AND $duree > 0) + $p->code .= '.\'<'.'?php header("Cache-Control: max-age=' + . $duree + . '"); ?'.'>\''; + } + $p->interdire_scripts = false; return $p; } diff --git a/ecrire/public/cacher.php b/ecrire/public/cacher.php index 9c959d95393533a6a661ac03fa9129ce5f41eaf7..71ca9512a39a3d9e66e27070df40082c1f229bf3 100644 --- a/ecrire/public/cacher.php +++ b/ecrire/public/cacher.php @@ -231,7 +231,8 @@ function restaurer_meta_donnees ($contenu) { } } $page['texte'] = substr($contenu, strlen($match[0])); - } else $page['texte'] = $contenu; + } else + $page['texte'] = $contenu; return $page; } @@ -254,12 +255,12 @@ function nettoyer_petit_cache($prefix, $duree = 300) { // Interface du gestionnaire de cache // Si son 3e argument est non vide, elle passe la main a creer_cache -// Sinon, elle recoit un contexte (ou le construit a partir de REQUEST_URI) +// Sinon, elle recoit un contexte (ou le construit a partir de REQUEST_URI) // et affecte les 4 autres parametres recus par reference: // - use_cache qui est -// < 0 s'il faut calculer la page sans la mettre en cache -// = 0 si on peut utiliser un cache existant -// > 0 s'il faut calculer la page et la mette en cache use_cache secondes +// < 0 s'il faut calculer la page sans la mettre en cache +// = 0 si on peut utiliser un cache existant +// > 0 s'il faut calculer la page et la mette en cache use_cache secondes // - chemin_cache qui est le chemin d'acces au fichier ou vide si pas cachable // - page qui est le tableau decrivant la page, si le cache la contenait // - lastmodified qui vaut la date de derniere modif du fichier. @@ -304,9 +305,9 @@ function public_cacher_dist($contexte, &$use_cache, &$chemin_cache, &$page, &$la // cas sans jamais de cache pour raison interne if (isset($GLOBALS['var_mode']) && - (isset($_COOKIE['spip_session']) - || isset($_COOKIE['spip_admin']) - || @file_exists(_ACCESS_FILE_NAME))) { + (isset($_COOKIE['spip_session']) + || isset($_COOKIE['spip_admin']) + || @file_exists(_ACCESS_FILE_NAME))) { supprimer_fichier(_DIR_CACHE . $chemin_cache); }