gitweb: check if-modified-since for feeds
Offering Last-modified header for feeds is only half the work, even if we bail out early on HEAD requests. We should also check that same date against If-modified-since, and bail out early with 304 Not Modified if that's the case. Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
2757b54d46
commit
cd956c73a2
@ -6015,7 +6015,25 @@ sub git_feed {
|
||||
}
|
||||
if (defined($commitlist[0])) {
|
||||
%latest_commit = %{$commitlist[0]};
|
||||
%latest_date = parse_date($latest_commit{'committer_epoch'});
|
||||
my $latest_epoch = $latest_commit{'committer_epoch'};
|
||||
%latest_date = parse_date($latest_epoch);
|
||||
my $if_modified = $cgi->http('IF_MODIFIED_SINCE');
|
||||
if (defined $if_modified) {
|
||||
my $since;
|
||||
if (eval { require HTTP::Date; 1; }) {
|
||||
$since = HTTP::Date::str2time($if_modified);
|
||||
} elsif (eval { require Time::ParseDate; 1; }) {
|
||||
$since = Time::ParseDate::parsedate($if_modified, GMT => 1);
|
||||
}
|
||||
if (defined $since && $latest_epoch <= $since) {
|
||||
print $cgi->header(
|
||||
-type => $content_type,
|
||||
-charset => 'utf-8',
|
||||
-last_modified => $latest_date{'rfc2822'},
|
||||
-status => '304 Not Modified');
|
||||
return;
|
||||
}
|
||||
}
|
||||
print $cgi->header(
|
||||
-type => $content_type,
|
||||
-charset => 'utf-8',
|
||||
|
Loading…
Reference in New Issue
Block a user