aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorFrank Lichtenheld <frank@lichtenheld.de>2008-08-05 19:48:34 -0300
committerFrank Lichtenheld <frank@lichtenheld.de>2008-08-05 19:48:34 -0300
commitf12ba374c31cd6192475847bd0549297a4c968de (patch)
treec54346e029cb005ea1569f66d1b621b8a74b56d7 /lib
parent2e6f79973eb99ec0eb277cb79e759c288f52c15f (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-xlib/Packages/Dispatcher.pm15
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() } } );