X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FHTTP.pm;h=393451221112478d832c82142d37e7c3faf57757;hb=c3eeaf664cf0458b075c2f23b18abeb5d720058e;hp=68c3b7881fc31c435d96d48b6afb0d056204df47;hpb=487bb3b2e43db8e8ebc0340039f7f22b79d45b25;p=public-inbox.git diff --git a/lib/PublicInbox/HTTP.pm b/lib/PublicInbox/HTTP.pm index 68c3b788..39345122 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) {