2009-04-23 9 views
2

J'ai une page générée par Perl. Le contenu de cette page change toutes les 30 minutes, donc je mets $ r-> set_last_modified() au moment où le contenu a changé pour la dernière fois.Apache2 mod_perl En-tête Last-Modified ignoré

Tout cela fonctionne bien et je peux voir l'en-tête correct arriver à mon navigateur. Lorsque j'actualise la page, je vois que mon navigateur utilise l'en-tête "If-Modified-Since" correct dans la requête au serveur, mais Apache2 l'ignore et renvoie la page entière.

Comment puis-je obtenir un comportement correct d'Apache2 et répondre avec un "HTTP/1.x 304 non modifié"?

(Les "dernière modification"/"si-Modified-Since" en-têtes sont traités correctement lors de la demande du contenu statique du même processus Apache2.)

Merci pour toute aide.

EDIT: Mes attentes sont-elles erronées? Dois-je gérer explicitement les en-têtes If-Modified-Since entrants dans mon script Perl? Apache ne stockera pas votre dernière valeur modifiée lorsqu'il traite une requête.

Répondre

2

Donc, afin de décider si quelque chose a été modifié, il devra exécuter votre application.

4

Malheureusement, oui, vos attentes sont fausses. Au moment où vous dites fondamentalement à Apache "OK, j'ai affaire à cette demande ...", Apache va vous donner la responsabilité de tout. Si vous voulez que la requête honore If-Modified-Since, il s'agit de votre code.

Face à cela, c'est le bon comportement, car Apache ne peut pas savoir ce que vous/vraiment/voulez dire par 'modifié' dans un gestionnaire Perl: il se peut que la meilleure vérification soit d'interroger votre DB backend pour un horodatage sur un enregistrement, par exemple ....

+0

Ouais je suppose que cela a du sens :) – aidan