From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-3.3 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00, RP_MATCHES_RCVD shortcircuit=no autolearn=unavailable version=3.3.2 X-Original-To: meta@public-inbox.org Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id ADE642044E for ; Wed, 6 Apr 2016 06:26:43 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH] http: clarify intent for persistence Date: Wed, 6 Apr 2016 06:26:43 +0000 Message-Id: <20160406062643.12394-1-e@80x24.org> List-Id: We don't actually need to know if a response is chunked or what the actual Content-Length is; we just need to know if the PSGI app properly terminated the response so we can handle persistent connections. --- lib/PublicInbox/HTTP.pm | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/lib/PublicInbox/HTTP.pm b/lib/PublicInbox/HTTP.pm index 68c3b78..3934512 100644 --- a/lib/PublicInbox/HTTP.pm +++ b/lib/PublicInbox/HTTP.pm @@ -151,7 +151,7 @@ sub response_header_write { my $proto = $env->{SERVER_PROTOCOL} or return; # HTTP/0.9 :P my $status = $res->[0]; my $h = "$proto $status " . status_message($status) . "\r\n"; - my ($len, $chunked); + my $term; my $headers = $res->[1]; for (my $i = 0; $i < @$headers; $i += 2) { @@ -159,33 +159,32 @@ sub response_header_write { my $v = $headers->[$i + 1]; next if $k =~ /\A(?:Connection|Date)\z/i; - $len = $v if $k =~ /\AContent-Length\z/i; - if ($k =~ /\ATransfer-Encoding\z/i && $v =~ /\bchunked\b/i) { - $chunked = 1; + if ($k =~ /\AContent-Length\z/ || + ($k =~ /\ATransfer-Encoding\z/i && $v =~ /\bchunked\b/i)) { + $term = 1; } - $h .= "$k: $v\r\n"; } my $conn = $env->{HTTP_CONNECTION} || ''; - my $alive = (defined($len) || $chunked) && + my $alive = $term && (($proto eq 'HTTP/1.1' && $conn !~ /\bclose\b/i) || ($conn =~ /\bkeep-alive\b/i)); $h .= 'Connection: ' . ($alive ? 'keep-alive' : 'close'); $h .= "\r\nDate: " . http_date() . "\r\n\r\n"; - if (($len || $chunked) && $env->{REQUEST_METHOD} ne 'HEAD') { + if ($term && $env->{REQUEST_METHOD} ne 'HEAD') { more($self, $h); } else { $self->write($h); } - ($alive, $chunked); + $alive; } sub response_write { my ($self, $env, $res) = @_; - my ($alive, $chunked) = response_header_write($self, $env, $res); + my $alive = response_header_write($self, $env, $res); my $write = sub { $self->write($_[0]) }; my $close = sub { if ($alive) { -- EW