Exemple : en-têtes Last-Modified dans les scripts
Ce script CGI Perl indique comment utiliser l'en-tête Last-Modified dans les scripts à des fins de démonstration.
#!/usr/bin/perl use strict; use warnings; use CGI; use CGI::Util; use Date::Parse; my $q = new CGI; my $last_mod = $ENV{HTTP_IF_MODIFIED_SINCE}; if (defined $last_mod) { $last_mod = str2time($last_mod); if (time() - $last_mod < 60) { print $q->header(-status=>304); exit 0; } } print $q->header(-type => "text/html", -status => 200, -last_modified => CGI::Util::expires("now")); print "<html><body>\n<h1>Last-Modified Test</h1>\n" . "<p>Date: ".scalar localtime()."</p>\n" . "<table>\n"; foreach my $var (sort keys %ENV) { next unless $var =~ /^HTTP_/; print "<tr><td>$var</td><td>$ENV{$var}</td></tr>\n"; } print "</table></body></html>\n"; exit 0;
Le script commence par vérifier si un en-tête HTTP If-Modified-Since a été envoyé par le navigateur. Si un tel en-tête a été envoyé et si sa date associée entre dans le cadre des 60 dernières secondes, le script envoie une réponse 304 Not Modified.
Dans le cas contraire, le script envoie une réponse contenant l'en-tête Last-Modified défini sur l'heure en cours, laquelle sera réutilisée par le navigateur lors des prochaines requêtes (avec l'en-tête If-Modified-Since).
Lorsque vous chargez le script sur un serveur Web CGI, une réponse similaire à celle-ci s'affiche :
Last-Modified Test
Date: Fri Aug 3 17:02:08 2007
HTTP_ACCEPT | text/xml,application/xml,application/xhtml+xml,... |
HTTP_ACCEPT_CHARSET | ISO-8859-1,utf-8;q=0.7,*;q=0.7 |
HTTP_ACCEPT_ENCODING | gzip,deflate |
HTTP_ACCEPT_LANGUAGE | en-us,en;q=0.5 |
HTTP_CONNECTION | keep-alive |
HTTP_COOKIE | 200 |
HTTP_HOST | localhost |
HTTP_IF_MODIFIED_SINCE | Wed, 01 Aug 2007 15:59:49 GMT |
HTTP_KEEP_ALIVE | 300 |
HTTP_USER_AGENT | Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.5) Gecko/20060601 Firefox/2.0.0.5 (Ubuntu-edgy) |
Si vous rechargez la page en moins de 60 secondes, le serveur n'envoie aucune réponse, aucune nouvelle page n'est générée et la même page reste affichée. Cela est reflété par le fait que les en-têtes Date et HTTP_IF_MODIFIED_SINCE ne changent pas lorsque vous rechargez la page.
Une minute plus tard, la page expire dans le cache. La prochaine requête entraîne ensuite le rechargement de la page et la définition d'une nouvelle date d'expiration dans le cache.