Commit c8e15d47 authored by Dietmar Maurer's avatar Dietmar Maurer

fix bug #385: correctly handle Accept-Encoding

parent 61473e52
...@@ -120,6 +120,7 @@ sub finish_response { ...@@ -120,6 +120,7 @@ sub finish_response {
delete $reqstate->{log}; delete $reqstate->{log};
delete $reqstate->{request}; delete $reqstate->{request};
delete $reqstate->{proto}; delete $reqstate->{proto};
delete $reqstate->{accept_gzip};
if ($reqstate->{tmpfilename}) { if ($reqstate->{tmpfilename}) {
unlink $reqstate->{tmpfilename}; unlink $reqstate->{tmpfilename};
...@@ -147,6 +148,8 @@ sub response { ...@@ -147,6 +148,8 @@ sub response {
#print "$$: send response: " . Dumper($resp); #print "$$: send response: " . Dumper($resp);
$nocomp = 1 if !$reqstate->{accept_gzip};
my $code = $resp->code; my $code = $resp->code;
my $msg = $resp->message || HTTP::Status::status_message($code); my $msg = $resp->message || HTTP::Status::status_message($code);
($msg) = $msg =~m/^(.*)$/m; ($msg) = $msg =~m/^(.*)$/m;
...@@ -302,6 +305,7 @@ sub proxy_request { ...@@ -302,6 +305,7 @@ sub proxy_request {
$headers->{'cookie'} = PVE::REST::create_auth_cookie($ticket) if $ticket; $headers->{'cookie'} = PVE::REST::create_auth_cookie($ticket) if $ticket;
$headers->{'CSRFPreventionToken'} = $token if $token; $headers->{'CSRFPreventionToken'} = $token if $token;
$headers->{'Accept-Encoding'} = 'gzip' if $reqstate->{accept_gzip};
my $content; my $content;
...@@ -336,6 +340,7 @@ sub proxy_request { ...@@ -336,6 +340,7 @@ sub proxy_request {
delete $hdr->{HTTPVersion}; delete $hdr->{HTTPVersion};
my $header = HTTP::Headers->new(%$hdr); my $header = HTTP::Headers->new(%$hdr);
my $resp = HTTP::Response->new($code, $msg, $header, $body); my $resp = HTTP::Response->new($code, $msg, $header, $body);
# Note: disable compression, because body is already compressed
$self->response($reqstate, $resp, undef, 1); $self->response($reqstate, $resp, undef, 1);
}; };
warn $@ if $@; warn $@ if $@;
...@@ -689,6 +694,8 @@ sub unshift_read_header { ...@@ -689,6 +694,8 @@ sub unshift_read_header {
} }
my $conn = $r->header('Connection'); my $conn = $r->header('Connection');
my $accept_enc = $r->header('Accept-Encoding');
$reqstate->{accept_gzip} = ($accept_enc && $accept_enc =~ m/gzip/) ? 1 : 0;
if ($conn) { if ($conn) {
$reqstate->{keep_alive} = 0 if $conn =~ m/close/oi; $reqstate->{keep_alive} = 0 if $conn =~ m/close/oi;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment