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:

committed by
Junio C Hamano

parent
2757b54d46
commit
cd956c73a2
@ -6015,7 +6015,25 @@ sub git_feed {
|
|||||||
}
|
}
|
||||||
if (defined($commitlist[0])) {
|
if (defined($commitlist[0])) {
|
||||||
%latest_commit = %{$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(
|
print $cgi->header(
|
||||||
-type => $content_type,
|
-type => $content_type,
|
||||||
-charset => 'utf-8',
|
-charset => 'utf-8',
|
||||||
|
Reference in New Issue
Block a user