From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-3.9 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00, T_SCC_BODY_TEXT_LINE shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 527731F852 for ; Sun, 30 Jan 2022 22:31:34 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH] http: don't send chunk finalizer on HEAD responses Date: Sun, 30 Jan 2022 22:31:34 +0000 Message-Id: <20220130223134.10788-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: AFAIK this doesn't affect Varnish or nginx users, but those should eventually become optional dependencies. --- lib/PublicInbox/HTTP.pm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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';