From f1d73de7cc202a70e97c31df236e1f23267a5f14 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 1 Jan 2020 10:38:54 +0000 Subject: wwwstatic: implement Last-Modified and If-Modified-Since We're already serving static files for cgit, and will serve more static files, soon. --- lib/PublicInbox/WwwStatic.pm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'lib/PublicInbox/WwwStatic.pm') diff --git a/lib/PublicInbox/WwwStatic.pm b/lib/PublicInbox/WwwStatic.pm index 58db58b4..b8efcf62 100644 --- a/lib/PublicInbox/WwwStatic.pm +++ b/lib/PublicInbox/WwwStatic.pm @@ -4,6 +4,7 @@ package PublicInbox::WwwStatic; use strict; use Fcntl qw(:seek); +use HTTP::Date qw(time2str); sub prepare_range { my ($env, $in, $h, $beg, $end, $size) = @_; @@ -50,9 +51,14 @@ sub response { my ($env, $h, $path, $type) = @_; return unless -f $path && -r _; # just in case it's a FIFO :P - # TODO: If-Modified-Since and Last-Modified? open my $in, '<', $path or return; my $size = -s $in; + my $mtime = time2str((stat(_))[9]); + + if (my $ims = $env->{HTTP_IF_MODIFIED_SINCE}) { + return [ 304, [], [] ] if $mtime eq $ims; + } + my $len = $size; my $code = 200; push @$h, 'Content-Type', $type; @@ -63,7 +69,7 @@ sub response { return [ 416, $h, [] ]; } } - push @$h, 'Content-Length', $len; + push @$h, 'Content-Length', $len, 'Last-Modified', $mtime; my $body = bless { initial_rd => 65536, len => $len, -- cgit v1.2.3-24-ge0c7