Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Entêtes "cache" différentes de celles générées

3 views
Skip to first unread message

Dominique Ottello

unread,
Oct 9, 2011, 5:33:39 AM10/9/11
to
Bonjour,

Je ne comprend pas pourquoi les ent�tes (header) vues, sous Firefox, par
l'extension Live HTTP Headers ne refl�tent pas celles qui sont g�n�r�es
par les directives PHP header();

Par exemple, les ent�tes de mon site http://aviatechno.free.fr sont
g�n�r�es par le code PHP (Les calculs de temps ont �t� pr�alablement
v�rifi�s) :

header("content-type:text/html; charset=$charset");
header('Vary: Accept-Encoding');
header('Cache-Control: max-age=259200, must-revalidate');
header('Last-Modified: '.date('D, d M Y H:i:s',$modified).' GMT');
$offset = 60 * 60 * 24 * 5; //5 jours
header('Expires: '.gmdate('D, d M Y H:i:s', time() + $offset).' GMT');
ob_start("ob_gzhandler");
session_start();

et on voit, via LiveHTTPHeaders :

HTTP/1.1 200 OK
Date: Sun, 09 Oct 2011 09:27:04 GMT
Server: Apache/ProXad [Aug 9 2008 02:45:09]
Cache-Control: no-store, no-cache, must-revalidate, post-check=0,
pre-check=0
Content-Encoding: gzip
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
Vary: Accept-Encoding
X-Powered-By: PHP/5.1.3RC4-dev
Set-Cookie: PHPSESSID=85ad7ab8927784124fccb7e4fd2472ab; path=/
Last-Modified: Fri, 23 Sep 2011 00:00:00 GMT
Connection: close
Content-Type: text/html; charset=iso-8859-1

Le Last-Modified est bon, mais Expires devrait indiquer :
Fri, 14 Oct 2011 09:30:06 GMT

D'autre part, je n'envoie pas, pour Cache-Control : no-store, no-cache,
post-check=0, pre-check=0 ni Pragma: no-cache.

D'o� cela vient-il ?

Que n'ai-je pas compris ?


--
Aujourd'hui, l'id�al du progr�s est remplac� par l'id�al de l'innovation :
il ne s'agit pas que ce soit mieux, il s'agit seulement que ce soit nouveau,
m�me si c'est pire qu'avant et cela de toute �vidence. Montherlant
Technologie a�ronautique - http://ottello.net - Les anciens de Vilg�nis

Pascal Poncet

unread,
Oct 9, 2011, 9:46:53 AM10/9/11
to
Le 09/10/2011 11:33, Dominique Ottello a écrit :
> Bonjour,

Bonjour,

>
> Je ne comprend pas pourquoi les entêtes (header) vues, sous Firefox, par
> l'extension Live HTTP Headers ne reflètent pas celles qui sont générées
> par les directives PHP header();
>

Déjà le serveur qui fournit le fichier traité par PHP peut rajouter sa
sauce, avec des directives d'initialisation ou de htaccess.

> Le Last-Modified est bon, mais Expires devrait indiquer :
> Fri, 14 Oct 2011 09:30:06 GMT
>
> D'autre part, je n'envoie pas, pour Cache-Control : no-store, no-cache,
> post-check=0, pre-check=0 ni Pragma: no-cache.
>
> D'où cela vient-il ?

Comme c'est là, ça sent le proxy à plein nez, à mon avis.
C'est le seul, sur le réseau, qui travaille sur la couche applicative et
capable de faire ces modifs.


--
Cordialement,
Pascal

Dominique Ottello

unread,
Oct 9, 2011, 10:32:32 AM10/9/11
to
Pascal Poncet <poncet.pas...@gmail.com.invalid> �crivait :

> Comme c'est l�, �a sent le proxy � plein nez, � mon avis.

A priori (� moins que ce soit � mon insu), je ne passe pas par un proxy.
Je vais voir du c�t� de chez Free.

SAM

unread,
Oct 9, 2011, 10:46:39 AM10/9/11
to
Le 09/10/11 16:32, Dominique Ottello a �crit :

chez Free �a n'a pas l'air de faire gd' chose
<http://je.m.arrete.free.fr/info.php5>
<http://je.m.arrete.free.fr/info>


hop!

Date: Sun, 09 Oct 2011 14:38:53 GMT
Server: Apache/ProXad [Aug 5 2010 16:17:11]
Content-Location: info.php
TCN: choice
Vary: negotiate,accept
X-Powered-By: PHP/4.4.3-dev
Connection: close
Content-Type: text/html

200 OK


ou bien, si php 5, re-hop! :

Date: Sun, 09 Oct 2011 14:42:12 GMT
Server: Apache/ProXad [Aug 5 2010 16:17:11]
X-Powered-By: PHP/5.1.3RC4-dev
Connection: close
Content-Type: text/html

200 OK

<http://les.pages.perso.chez.free.fr/index.php?category/En-cas-de-probleme>

--
St�phane Moriaux avec/with iMac-intel

Olivier Miakinen

unread,
Oct 10, 2011, 5:29:25 AM10/10/11
to
Bonjour,

Le 09/10/2011 11:33, Dominique Ottello a ï¿œcrit :


>
> header('Last-Modified: '.date('D, d M Y H:i:s',$modified).' GMT');
> $offset = 60 * 60 * 24 * 5; //5 jours
> header('Expires: '.gmdate('D, d M Y H:i:s', time() + $offset).' GMT');
>

> Expires: Thu, 19 Nov 1981 08:52:00 GMT

> Last-Modified: Fri, 23 Sep 2011 00:00:00 GMT
>

> Le Last-Modified est bon, mais Expires devrait indiquer :
> Fri, 14 Oct 2011 09:30:06 GMT

Quelques questions pour avancer :

- que valent $modified et time() ?
- qu'est-ce qui change si tu mets time() au lieu de $modified dans
l'entï¿œte Last-Modified ?
- qu'est-ce qui change si tu mets $modified au lieu de time() dans
l'entï¿œte Expires ?
- qu'est-ce qui change si tu mets gmdate() au lieu de date() dans
l'entï¿œte Last-Modified ?
- qu'est-ce qui change si tu mets date() au lieu de gmdate() dans
l'entï¿œte Expires ?

Tu peux aussi essayer de rajouter des entï¿œtes de test :

header('XDateModified: '.date('D, d M Y H:i:s',$modified).' GMT');
header('XGmdateModified: '.gmdate('D, d M Y H:i:s',$modified).' GMT');


$offset = 60 * 60 * 24 * 5; //5 jours

header('XDateTime: '.date('D, d M Y H:i:s', time()).' GMT');
header('XGmdateTime: '.gmdate('D, d M Y H:i:s', time()).' GMT');
header('XDateTimeOffset: '.


date('D, d M Y H:i:s', time() + $offset).' GMT');

header('XGmdateTimeOffset: '.

Dominique Ottello

unread,
Oct 10, 2011, 11:17:27 AM10/10/11
to
Olivier Miakinen <om+...@miakinen.net> écrivait :

> Tu peux aussi essayer de rajouter des entêtes de test :
Les entêtes de test passent toutes très bien tant en local qu'en réel
chez Free :

HTTP/1.1 200 OK
Date: Mon, 10 Oct 2011 15:10:34 GMT
Server: Apache/ProXad [Aug 9 2008 02:45:09]
Cache-Control: no-store, no-cache, must-revalidate, post-check=0,
pre-check=0
Content-Encoding: gzip
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
Vary: Accept-Encoding
X-Powered-By: PHP/5.1.3RC4-dev
XDateModified: Fri, 23 Sep 2011 00:00:00 GMT
XDateTime: Mon, 10 Oct 2011 17:10:34 GMT
XDateTimeOffset: Sat, 15 Oct 2011 17:10:34 GMT
XGmdateModified: Thu, 22 Sep 2011 22:00:00 GMT
XGmdateTime: Mon, 10 Oct 2011 15:10:34 GMT
XGmdateTimeOffset: Sat, 15 Oct 2011 15:10:34 GMT
Set-Cookie: PHPSESSID=afb6496a5bfdf546e4978379293f8560; path=/
Last-Modified: Fri, 23 Sep 2011 00:00:00 GMT
Connection: close
Content-Type: text/html; charset=iso-8859-1

Ce qui m'intrigue fortement c'est cette entête Expires :

Expires: Thu, 19 Nov 1981 08:52:00 GMT

TOUJOURS exactement la même, en local, chez Free et chez 1and1.

J'ai comme l'impression qu'il me manque une ou plusieurs instruction(s)
PHP avant d'envoyer certains header pour qu'ils soient pris en compte
parce que, comme je l'ai écrit ci-dessus, le problème est le même en
local, ce que je n'avais pas regardé avant.


--
Il vaut mieux ignorer où l'on est, et savoir qu'on l'ignore, que de se
croire avec confiance où l'on n'est pas. Jean Dominique Cassini.
Technologie aéronautique - http://ottello.net - Les anciens de Vilgénis

Olivier Miakinen

unread,
Oct 10, 2011, 12:18:53 PM10/10/11
to
Le 10/10/2011 17:17, Dominique Ottello a ï¿œcrit :
>
>> Tu peux aussi essayer de rajouter des entï¿œtes de test :
> Les entï¿œtes de test passent toutes trï¿œs bien tant en local qu'en rï¿œel
> chez Free :
>
> [...]

> XDateModified: Fri, 23 Sep 2011 00:00:00 GMT
> XDateTime: Mon, 10 Oct 2011 17:10:34 GMT
> XDateTimeOffset: Sat, 15 Oct 2011 17:10:34 GMT
> XGmdateModified: Thu, 22 Sep 2011 22:00:00 GMT
> XGmdateTime: Mon, 10 Oct 2011 15:10:34 GMT
> XGmdateTimeOffset: Sat, 15 Oct 2011 15:10:34 GMT
> [...]

Ainsi donc, les fonctions time() et gmdate() sont hors de cause.
Et probablement aussi la fonction header().

> Ce qui m'intrigue fortement c'est cette entï¿œte Expires :


>
> Expires: Thu, 19 Nov 1981 08:52:00 GMT
>

> TOUJOURS exactement la mï¿œme, en local, chez Free et chez 1and1.

Cela tend ᅵ confirmer que la fonction header() est hors de cause. Mais
vu que c'est la mᅵme chose sur trois serveurs, j'aurais tendance ᅵ
soupï¿œonner comme Pascal des directives d'initialisation ou des fichiers
.htaccess . Est-ce que tu as la mï¿œme chose avec des fichiers statiques ?
Et si tu mets un fichier ᅵ la racine du site, c'est toujours le cas ?

Note : je ne peux pas tester sur ton site directement, je passe derriï¿œre
un proxy filtrant qui me l'interdit.

> J'ai comme l'impression qu'il me manque une ou plusieurs instruction(s)
> PHP avant d'envoyer certains header pour qu'ils soient pris en compte

> parce que, comme je l'ai ï¿œcrit ci-dessus, le problï¿œme est le mï¿œme en
> local, ce que je n'avais pas regardᅵ avant.

Je peux me tromper, mais je suspecte que ton code PHP est complï¿œtement
ï¿œtranger au problï¿œme.

Cordialement,
--
Olivier Miakinen

Pascal Poncet

unread,
Oct 10, 2011, 12:18:55 PM10/10/11
to
Le 09/10/2011 16:32, Dominique Ottello a écrit :
> A priori (À moins que ce soit à mon insu), je ne passe pas par un proxy.

Et tu sembles avoir testé en local avec le même résultat, si j'ai bien
suivi.

Je ne suis pas très à l'aise avec les paramétrages de cache un peu
complexes, mais n'y a-t-il pas une contradiction, ou un chevauchement
possible, entre ces deux directives :

- "Cache-Control: ...max-age= <3 jours>..."
- "Expires: <J + 5 jours>..."

Chez moi en local, avec l'extension Firebug, je vois une différence
entre la réponse du serveur et la lecture du cache, lorsque j'envoie des
paramètres identiques aux tiens.

Réponse HTTP :

- Cache-Control: max-age=259200, must-revalidate
- Expires: Sat, 15 Oct 2011 16:11:38 GMT

Lecture cache :

- Expires Thu Oct 13 2011 18:11:38 GMT+0200 (CEST)

Bon, je ne sais si c'est une bonne piste, mais en plus je ne vois pas
trop l'intérêt, pour servir des pages dynamiques.
Peux-tu nous éclairer ?


--
Cordialement,
Pascal

Olivier Miakinen

unread,
Oct 10, 2011, 12:37:48 PM10/10/11
to
Le 10/10/2011 18:18, Pascal Poncet a ï¿œcrit :
>
> Je ne suis pas trᅵs ᅵ l'aise avec les paramᅵtrages de cache un peu
> complexes, mais n'y a-t-il pas une contradiction, ou un chevauchement
> possible, entre ces deux directives :
>
> - "Cache-Control: ...max-age= <3 jours>..."
> - "Expires: <J + 5 jours>..."

Ah oui, je l'avais lu mais sans percuter (je cherchais juste ᅵ vᅵrifier
le format de la date) :

<http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html>
14.21 Expires

...

Note: if a response includes a Cache-Control field with the max-
age directive (see section 14.9.3), that directive overrides the
Expires field.
</>

Dominique Ottello

unread,
Oct 10, 2011, 1:59:03 PM10/10/11
to
Olivier Miakinen <om+...@miakinen.net> �crivait :

> Cela tend � confirmer que la fonction header() est hors de cause. Mais
> vu que c'est la m�me chose sur trois serveurs, j'aurais tendance �
> soup�onner comme Pascal des directives d'initialisation ou des fichiers
> .htaccess .

Maintenant (enfin) les ent�tes correspondent � ce que j'envoie, et ce
sur les trois serveurs :

HTTP/1.1 200 OK
Date: Mon, 10 Oct 2011 17:54:05 GMT


Server: Apache/ProXad [Aug 9 2008 02:45:09]

Cache-Control: max-age=432000, must-revalidate
Content-Encoding: gzip
Expires: Sat, 15 Oct 2011 17:54:04 GMT
Vary: Accept-Encoding
X-Powered-By: PHP/5.1.3RC4-dev
Set-Cookie: PHPSESSID=9301ee036d4439645dbc5f0fb25fae49; path=/
Last-Modified: Fri, 23 Sep 2011 00:00:00 GMT


Connection: close
Content-Type: text/html; charset=iso-8859-1

Pour ce faire, il faut INTERDIRE � PHP de remplacer les ent�tes du
client par les ent�tes par d�faut. Donc, avant d'envoyer les header :

session_cache_limiter( FALSE );

--
Aujourd'hui, l'id�al du progr�s est remplac� par l'id�al de l'innovation :
il ne s'agit pas que ce soit mieux, il s'agit seulement que ce soit nouveau,
m�me si c'est pire qu'avant et cela de toute �vidence. Montherlant

Technologie a�ronautique - http://ottello.net - Les anciens de Vilg�nis

0 new messages