J'utilise l'outil le plus excellent http://redbot.org pour les tests. Les en-têtes HTTP de mon site sont corrects (son code personnalisé dans PHP servant du contenu dynamique - si vous le souhaitez. s'assurer qu'il est mis en cache si possible - servi par Apache2)
Un des tests dit:
The If-Modified-Since response is missing required headers
HTTP requires 304 Not Modified responses to have certain headers, if they are also present in a normal (e.g., 200 OK response).
This response is missing the following headers: last-modified.
This can affect cache operation; because the headers are missing, caches might remove them from their cached copies.
... ainsi, resonse n'inclut pas l'en-tête Last-Modified. Cependant, le code essaie de l'envoyer. En recherchant plus loin, il semble qu'Apache utilise une liste blanche d'en-têtes HTTP, cela permettra à 304 réponses ...
if (r->status == HTTP_NOT_MODIFIED) {
apr_table_do((int (*)(void *, const char *, const char *)) form_header_field,
(void *) &h, r->headers_out,
"Connection",
"Keep-Alive",
"ETag",
"Content-Location",
"Expires",
"Cache-Control",
"Vary",
"Warning",
"WWW-Authenticate",
"Proxy-Authenticate",
"Set-Cookie",
"Set-Cookie2",
NULL);
}
else {
send_all_header_fields(&h, r);
}
Cela se trouve autour de la ligne 1281 dans modules/http/http_filters.c du code source Apache HTTPD 2.2.22.
.... "Dernière modification" ne figure pas sur cette liste.
La question est donc de savoir ce qui ne va pas, Redbot ou Apache?
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html ne semble pas spécifier si la dernière modification doit être incluse. (il est dit que l'Etag devrait être - et cela est autorisé dans la liste des Apaches)
En cas d’utilité, c’est le cas de test: http://redbot.org/?uri=http%3A%2F%2Fwww.geograph.org.uk%2Fhelp%2Fsitemap - mon code incluez l'en-tête Last-Modified - c'est juste que redbot ne l'obtient jamais (ni aucun en-tête X- .. personnalisé).
Vous avez raison. RED a mis en œuvre les exigences de HTTPbis http://tools.ietf.org/html/draft-ietf-httpbis-p4-conditional-18#section-4.1 .
Normalement, les exigences HTTPbis sont rétro-compatibles avec la RFC2616 (c’est-à-dire qu’elles ne font pas actuellement d’implémentations conformes à la non-conformité 2616), mais cette modification a échoué. Nous allons ouvrir un problème pour résoudre ce problème. En attendant, je changerai les exigences des RED.
Non, Last-Modified
n'est pas obligatoire, comme vous l'avez indiqué dans la RFC 2616. J'ai trouvé ce problème https://github.com/mnot/redbot/issues/61 dans lequel ils ont implémenté le chèque pour les en-têtes requis. Cependant, ils ont déclaré dans le numéro que seule la "date" était requise, mais que la mise en œuvre était différente (par erreur, je pense).