]> git.deb.at Git - deb/packages.git/commitdiff
Packages::Dispatcher: Send 304 header if possible
authorFrank Lichtenheld <frank@lichtenheld.de>
Tue, 5 Aug 2008 22:48:34 +0000 (19:48 -0300)
committerFrank Lichtenheld <frank@lichtenheld.de>
Tue, 5 Aug 2008 22:48:34 +0000 (19:48 -0300)
That should be a good way to cut down the load a bit.

lib/Packages/Dispatcher.pm

index 75264a006cf859d93b34d0bab59efc7abcc5687c..c2500116f10593f69406af17c084c921def23660 100755 (executable)
@@ -30,6 +30,7 @@ use DB_File;
 use URI::Escape;
 use Benchmark ':hireswallclock';
 use I18N::AcceptLanguage;
+use Date::Parse;
 
 use Deb::Versions;
 use Packages::Config qw( $DBDIR $ROOT $TEMPLATEDIR $CACHEDIR
@@ -92,6 +93,14 @@ sub do_dispatch {
     &Packages::Config::init( $homedir );
     &Packages::DB::init();
 
+    if ($input->http('If-Modified-Since') and
+       (my $modtime = str2time($input->http('If-Modified-Since'), 'UTC'))) {
+       if ($modtime < $Packages::DB::db_read_time) {
+           print $input->header(-status => 304);
+           exit;
+       }
+    }
+
     my %PO_LANGUAGES = map { $_ => 1 } @LANGUAGES;
     my %DDTP_LANGUAGES = map { $_ => 1 } @DDTP_LANGUAGES;
     my $acc = I18N::AcceptLanguage->new(defaultLanguage => 'en');
@@ -331,7 +340,11 @@ sub do_dispatch {
     $page_content{params} = \%params;
 
     unless (@Packages::CGI::fatal_errors) {
-       print $input->header(-charset => $charset, -type => get_mime($opts{format}) );
+       print $input->header(-charset => $charset,
+                            -type => get_mime($opts{format}),
+                            -last_modified => strftime("%a, %d %b %Y %T %z",
+                                                       localtime($Packages::DB::db_read_time)),
+                            );
        #use Data::Dumper;
        #print '<pre>'.Dumper(\%ENV, \%page_content, get_all_messages()).'</pre>';
        print $template->page( $what_to_do, { %page_content, %{ get_all_messages() } } );