Re: Need more info on compression

2012-12-03 Thread Willy Tarreau
Hi Dmitry,

patch applied, thanks!
Willy




Re: Need more info on compression

2012-11-28 Thread Dmitry Sivachenko
On 24.11.2012 18:25, Willy Tarreau wrote:
 Hi Dmitry,
 
 On Thu, Nov 22, 2012 at 08:03:26PM +0400, Dmitry Sivachenko wrote:
 Hello!

 I was reading docs about HTTP compression support in -dev13 and it is a bit
 unclear to me how it works.

 Imagine I have:
 compression algo gzip
 compression type text/html text/javascript text/xml text/plain

 in defaults section.

 What will haproxy do if:
 1) backend server does NOT support compression;
 
 Haproxy will compress the matching responses.
 
 2) backend server does support compression;
 
 You have two possibilities :
   - either you just have the lines above, and the server will see
 the Accept-Encoding header from the client and will compress
 the response ; in this case, haproxy will see the compressed
 response and will not compress again ;
 
   - or you also have a compression offload line. In this case,
 haproxy will remove the Accept-Encoding header before passing
 the request to the server. The server will then *not* compress,
 and haproxy will compress the response. This is what I'm doing
 at home because the compressing server is bogus and sometimes
 emits wrong chunked encoded data!
 
 3) backend server does support compression and there is no these two
 compression* lines in haproxy config.
 
 Then haproxy's normal behaviour remains unchanged, the server compresses
 if it wants to and haproxy transfers the response unmodified.
 
 I think documentation needs to clarify things a bit.
 
 Possibly, however I don't know what to clarify nor how, it's always
 difficult to guess how people will understand a doc :-(
 
 Could you please propose some changes ? I would be happy to improve
 the doc if it helps people understand it.
 


Thank you very much for the explanation.

Please consider the attached patch, I hope it will clarify haproxy's behavior a
bit.

--- configuration.txt.orig  2012-11-26 06:11:05.0 +0400
+++ configuration.txt   2012-11-28 17:45:25.0 +0400
@@ -1903,16 +1903,23 @@
 
   Compression will be activated depending on the Accept-Encoding request
   header. With identity, it does not take care of that header.
+  If backend servers support HTTP compression, these directives
+  will be no-op: haproxy will see the compressed response and will not
+  compress again. If backend servers do not support HTTP compression and
+  there is Accept-Encoding header in request, haproxy will compress the
+  matching response.
 
   The offload setting makes haproxy remove the Accept-Encoding header to
   prevent backend servers from compressing responses. It is strongly
   recommended not to do this because this means that all the compression work
   will be done on the single point where haproxy is located. However in some
   deployment scenarios, haproxy may be installed in front of a buggy gateway
-  and need to prevent it from emitting invalid payloads. In this case, simply
-  removing the header in the configuration does not work because it applies
-  before the header is parsed, so that prevents haproxy from compressing. The
-  offload setting should then be used for such scenarios.
+  with broken HTTP compression implementation which can't be turned off.
+  In that case haproxy can be used to prevent that gateway from emitting
+  invalid payloads. In this case, simply removing the header in the
+  configuration does not work because it applies before the header is parsed,
+  so that prevents haproxy from compressing. The offload setting should
+  then be used for such scenarios.
 
   Compression is disabled when:
 * the server is not HTTP/1.1.


Re: Need more info on compression

2012-11-24 Thread Willy Tarreau
Hi Dmitry,

On Thu, Nov 22, 2012 at 08:03:26PM +0400, Dmitry Sivachenko wrote:
 Hello!
 
 I was reading docs about HTTP compression support in -dev13 and it is a bit
 unclear to me how it works.
 
 Imagine I have:
 compression algo gzip
 compression type text/html text/javascript text/xml text/plain
 
 in defaults section.
 
 What will haproxy do if:
 1) backend server does NOT support compression;

Haproxy will compress the matching responses.

 2) backend server does support compression;

You have two possibilities :
  - either you just have the lines above, and the server will see
the Accept-Encoding header from the client and will compress
the response ; in this case, haproxy will see the compressed
response and will not compress again ;

  - or you also have a compression offload line. In this case,
haproxy will remove the Accept-Encoding header before passing
the request to the server. The server will then *not* compress,
and haproxy will compress the response. This is what I'm doing
at home because the compressing server is bogus and sometimes
emits wrong chunked encoded data!

 3) backend server does support compression and there is no these two
 compression* lines in haproxy config.

Then haproxy's normal behaviour remains unchanged, the server compresses
if it wants to and haproxy transfers the response unmodified.

 I think documentation needs to clarify things a bit.

Possibly, however I don't know what to clarify nor how, it's always
difficult to guess how people will understand a doc :-(

Could you please propose some changes ? I would be happy to improve
the doc if it helps people understand it.

Thanks!
Willy




Need more info on compression

2012-11-22 Thread Dmitry Sivachenko
Hello!

I was reading docs about HTTP compression support in -dev13 and it is a bit
unclear to me how it works.

Imagine I have:
compression algo gzip
compression type text/html text/javascript text/xml text/plain

in defaults section.

What will haproxy do if:
1) backend server does NOT support compression;
2) backend server does support compression;
3) backend server does support compression and there is no these two
compression* lines in haproxy config.

I think documentation needs to clarify things a bit.

In return, I am attaching a small patch which fixes 2 typos.

Thanks!
--- configuration.txt.orig  2012-11-22 04:11:33.0 +0400
+++ configuration.txt   2012-11-22 19:58:46.0 +0400
@@ -1887,7 +1887,7 @@
 offload  makes haproxy work as a compression offloader only (see notes).
 
   The currently supported algorithms are :
-identity  this is mostly for debugging, and it was useful for developping
+identity  this is mostly for debugging, and it was useful for developing
   the compression feature. Identity does not apply any change on
   data.
 
@@ -1901,7 +1901,7 @@
   This setting is only available when support for zlib was built
   in.
 
-  Compression will be activated depending of the Accept-Encoding request
+  Compression will be activated depending on the Accept-Encoding request
   header. With identity, it does not take care of that header.
 
   The offload setting makes haproxy remove the Accept-Encoding header to