diff options
author | Frank Lichtenheld <frank@lichtenheld.de> | 2008-08-05 19:48:34 -0300 |
---|---|---|
committer | Frank Lichtenheld <frank@lichtenheld.de> | 2008-08-05 19:48:34 -0300 |
commit | f12ba374c31cd6192475847bd0549297a4c968de (patch) | |
tree | c54346e029cb005ea1569f66d1b621b8a74b56d7 /lib | |
parent | 2e6f79973eb99ec0eb277cb79e759c288f52c15f (diff) |
Packages::Dispatcher: Send 304 header if possible
That should be a good way to cut down the load a bit.
Diffstat (limited to 'lib')
-rwxr-xr-x | lib/Packages/Dispatcher.pm | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/lib/Packages/Dispatcher.pm b/lib/Packages/Dispatcher.pm index 75264a0..c250011 100755 --- a/lib/Packages/Dispatcher.pm +++ b/lib/Packages/Dispatcher.pm @@ -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() } } ); |