From c1630b7dc4ef631250f77710b1c6cffea5e49b44 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 3 Jul 2016 00:43:12 +0000 Subject: githttpbackend: match Content-Type of git-http-backend(1) This will allow cache proxies such as Varnish to avoid caching data sent by us. --- lib/PublicInbox/GitHTTPBackend.pm | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'lib/PublicInbox') diff --git a/lib/PublicInbox/GitHTTPBackend.pm b/lib/PublicInbox/GitHTTPBackend.pm index b4851920..a9c0e9c7 100644 --- a/lib/PublicInbox/GitHTTPBackend.pm +++ b/lib/PublicInbox/GitHTTPBackend.pm @@ -64,15 +64,29 @@ sub drop_client ($) { } } +my $prev = 0; +my $exp; +sub cache_one_year { + my ($h) = @_; + my $t = time + 31536000; + push @$h, 'Expires', $t == $prev ? $exp : ($exp = time2str($prev = $t)), + 'Cache-Control', 'public, max-age=31536000'; +} + sub serve_dumb { my ($env, $git, $path) = @_; my @h; my $type; - if ($path =~ /\A(?:$BIN)\z/o) { - $type = 'application/octet-stream'; - push @h, 'Expires', time2str(time + 31536000); - push @h, 'Cache-Control', 'public, max-age=31536000'; + if ($path =~ m!\Aobjects/[a-f0-9]{2}/[a-f0-9]{38}\z!) { + $type = 'application/x-git-loose-object'; + cache_one_year(\@h); + } elsif ($path =~ m!\Aobjects/pack/pack-[a-f0-9]{40}\.pack\z!) { + $type = 'application/x-git-packed-objects'; + cache_one_year(\@h); + } elsif ($path =~ m!\Aobjects/pack/pack-[a-f0-9]{40}\.idx\z!) { + $type = 'application/x-git-packed-objects-toc'; + cache_one_year(\@h); } elsif ($path =~ /\A(?:$TEXT)\z/o) { $type = 'text/plain'; push @h, @no_cache; -- cgit v1.2.3-24-ge0c7