about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2022-01-30 22:31:34 +0000
committerEric Wong <e@80x24.org>2022-01-31 01:53:04 +0000
commit6beeb75e5ccddf9f4e8eefc62cbe349972f59917 (patch)
tree3ed457235fecf37e44e3c4c222a02ce3cc61ec25 /lib
parent7ec7df4c76802f20c30b7b32ccda44b5463e7a7a (diff)
downloadpublic-inbox-6beeb75e5ccddf9f4e8eefc62cbe349972f59917.tar.gz
AFAIK this doesn't affect Varnish or nginx users, but those
should eventually become optional dependencies.
Diffstat (limited to 'lib')
-rw-r--r--lib/PublicInbox/HTTP.pm4
1 files changed, 3 insertions, 1 deletions
diff --git a/lib/PublicInbox/HTTP.pm b/lib/PublicInbox/HTTP.pm
index e65988be..76e978a2 100644
--- a/lib/PublicInbox/HTTP.pm
+++ b/lib/PublicInbox/HTTP.pm
@@ -185,6 +185,7 @@ sub response_header_write {
         my $alive;
         if (!$term && $prot_persist) { # auto-chunk
                 $chunked = $alive = 2;
+                $alive = 3 if $env->{REQUEST_METHOD} eq 'HEAD';
                 $h .= "Transfer-Encoding: chunked\r\n";
                 # no need for "Connection: keep-alive" with HTTP/1.1
         } elsif ($term && ($prot_persist || ($conn =~ /\bkeep-alive\b/i))) {
@@ -224,6 +225,7 @@ sub identity_write ($$) {
 sub response_done {
         my ($self, $alive) = @_;
         delete $self->{env}; # we're no longer busy
+        # HEAD requests set $alive = 3 so we don't send "0\r\n\r\n";
         $self->write(\"0\r\n\r\n") if $alive == 2;
         $self->write($alive ? $self->can('requeue') : \&close);
 }
@@ -288,7 +290,7 @@ sub response_write {
                         getline_pull($self); # kick-off!
                 }
         # these are returned to the calling application:
-        } elsif ($alive == 2) {
+        } elsif ($alive >= 2) {
                 bless [ $self, $alive ], 'PublicInbox::HTTP::Chunked';
         } else {
                 bless [ $self, $alive ], 'PublicInbox::HTTP::Identity';