Compressed and uncompressed cached object handling

2009-11-17 Thread Daniel Rodriguez
Hi guys,

I'm having a problem with a varnish implementation that we are testing
to replace an ugly appliance. We were almost ready to place our server
in a more real  environment (some of our production sites), but I
found out that there is something not working properly with the
compression handling in my varnishd (varnish-2.0.5 - Debian)

Varnish its returning the first object cached no matter if i ask for a
clear object (no Accept-encoding specified) or a gzip/deflate object.
If the object cached is a gzip object it will return that no matter if
I later ask for a clear one later.

According to what I have seen in the documentation varnish should keep
both object versions (compressed and no-compressed) in the cache and
deliver the one that its asked by the client.

Step 1

I ask for a non-compressed object (no Accept-encoding specified). This
works great

GET -H TE: -sed http://foo.bar/test/prueba.php;
200 OK
Cache-Control: max-age=20
Connection: close
Date: Mon, 16 Nov 2009 16:56:06 GMT
Via: 1.1 varnish
Age: 0
Server: Apache
Content-Length: 11013
Content-Type: text/html; charset=iso-8859-15
Last-Modified: Mon, 16 Nov 2009 16:56:06 GMT
Client-Date: Mon, 16 Nov 2009 16:56:06 GMT
Client-Peer: 10.10.10.10:80
Client-Response-Num: 1
X-Varnish: 1655545411

The request goes like this in the log:

  12 SessionOpen  c 10.20.20.20 57909 :80
    12 ReqStart c 10.20.20.20 57909 1655545411
    12 RxRequest    c GET
    12 RxURL    c /test/prueba.php
    12 RxProtocol   c HTTP/1.1
    12 RxHeader c Connection: TE, close
    12 RxHeader c Host: foo.bar
    12 RxHeader c TE:
    12 RxHeader c User-Agent: lwp-request/5.827 libwww-perl/5.831
    12 VCL_call c recv
    12 VCL_return   c lookup
    12 VCL_call c hash
    12 VCL_return   c hash
    12 VCL_call c miss
    12 VCL_return   c fetch
    14 BackendOpen  b default 10.10.10.10 33484 10.30.30.30 80
    12 Backend  c 14 default default
    14 TxRequest    b GET
    14 TxURL    b /test/prueba.php
    14 TxProtocol   b HTTP/1.1
    14 TxHeader b Host: foo.bar
    14 TxHeader b User-Agent: lwp-request/5.827 libwww-perl/5.831
    14 TxHeader b X-Varnish: 1655545411
    14 TxHeader b X-Forwarded-For: 10.20.20.20
 0 CLI  - Rd ping
 0 CLI  - Wr 0 200 PONG 1258390564 1.0
    14 RxProtocol   b HTTP/1.1
    14 RxStatus b 200
    14 RxResponse   b OK
    14 RxHeader b Date: Mon, 16 Nov 2009 16:56:01 GMT
    14 RxHeader b Server: Apache
    14 RxHeader b Cache-control: max-age=20
    14 RxHeader b Last-Modified: Mon, 16 Nov 2009 16:56:06 GMT
    14 RxHeader b Connection: close
    14 RxHeader b Transfer-Encoding: chunked
    14 RxHeader b Content-Type: text/html; charset=iso-8859-15
    12 ObjProtocol  c HTTP/1.1
    12 ObjStatus    c 200
    12 ObjResponse  c OK
    12 ObjHeader    c Date: Mon, 16 Nov 2009 16:56:01 GMT
    12 ObjHeader    c Server: Apache
    12 ObjHeader    c Cache-control: max-age=20
    12 ObjHeader    c Last-Modified: Mon, 16 Nov 2009 16:56:06 GMT
    12 ObjHeader    c Content-Type: text/html; charset=iso-8859-15
    14 BackendClose b default
    12 TTL  c 1655545411 RFC 20 1258390566 0 0 20 0
    12 VCL_call c fetch
    12 VCL_return   c deliver
    12 Length   c 11013
    12 VCL_call c deliver
    12 VCL_return   c deliver
    12 TxProtocol   c HTTP/1.1
    12 TxStatus c 200
    12 TxResponse   c OK
    12 TxHeader c Server: Apache
    12 TxHeader c Cache-control: max-age=20
    12 TxHeader c Last-Modified: Mon, 16 Nov 2009 16:56:06 GMT
    12 TxHeader c Content-Type: text/html; charset=iso-8859-15
    12 TxHeader c Content-Length: 11013
    12 TxHeader c Date: Mon, 16 Nov 2009 16:56:06 GMT
    12 TxHeader c X-Varnish: 1655545411
    12 TxHeader c Age: 0
    12 TxHeader c Via: 1.1 varnish
    12 TxHeader c Connection: close
    12 ReqEnd   c 1655545411 1258390561.316438675
1258390566.327898026 0.000134945 5.010995150 0.000464201
    12 SessionClose c Connection: close
    12 StatSess c 10.20.20.20 57909 5 1 1 0 0 1 282 11013

Step 2

Then the next request will go with a (Accept-encoding: gzip), and
returns me a clear object :(

GET -H Accept-encoding: gzip -H TE: -sed http://foo.bar/test/prueba.php;
200 OK
Cache-Control: max-age=20
Connection: close
Date: Mon, 16 Nov 2009 16:56:09 GMT
Via: 1.1 varnish
Age: 3
Server: Apache
Content-Length: 11013
Content-Type: text/html; charset=iso-8859-15
Last-Modified: Mon, 16 Nov 2009 16:56:06 GMT
Client-Date: Mon, 16 Nov 2009 16:56:08 GMT
Client-Peer: 10.10.10.10:80
Client-Response-Num: 1
X-Varnish: 1655545412 1655545411

12 SessionOpen  c 10.20.20.20 57910 :80
12 ReqStart c 10.20.20.20 57910 1655545412
12 RxRequestc GET
12 RxURLc /test/prueba.php
12 RxProtocol   c HTTP/1.1
12 RxHeader c Connection: TE, close
12 RxHeader c Accept-Encoding: gzip
12 RxHeader c Host: foo.bar
   

Re: Compressed and uncompressed cached object handling

2009-11-17 Thread Michael S. Fischer
Are you returning a Vary: Accept-Encoding in your origin server's  
response headers?

--Michael

On Nov 17, 2009, at 4:01 PM, Daniel Rodriguez wrote:

 Hi guys,

 I'm having a problem with a varnish implementation that we are testing
 to replace an ugly appliance. We were almost ready to place our server
 in a more real  environment (some of our production sites), but I
 found out that there is something not working properly with the
 compression handling in my varnishd (varnish-2.0.5 - Debian)

 Varnish its returning the first object cached no matter if i ask for a
 clear object (no Accept-encoding specified) or a gzip/deflate object.
 If the object cached is a gzip object it will return that no matter if
 I later ask for a clear one later.

 According to what I have seen in the documentation varnish should keep
 both object versions (compressed and no-compressed) in the cache and
 deliver the one that its asked by the client.

 Step 1

 I ask for a non-compressed object (no Accept-encoding specified). This
 works great

 GET -H TE: -sed http://foo.bar/test/prueba.php;
 200 OK
 Cache-Control: max-age=20
 Connection: close
 Date: Mon, 16 Nov 2009 16:56:06 GMT
 Via: 1.1 varnish
 Age: 0
 Server: Apache
 Content-Length: 11013
 Content-Type: text/html; charset=iso-8859-15
 Last-Modified: Mon, 16 Nov 2009 16:56:06 GMT
 Client-Date: Mon, 16 Nov 2009 16:56:06 GMT
 Client-Peer: 10.10.10.10:80
 Client-Response-Num: 1
 X-Varnish: 1655545411

 The request goes like this in the log:

   12 SessionOpen  c 10.20.20.20 57909 :80
 12 ReqStart c 10.20.20.20 57909 1655545411
 12 RxRequestc GET
 12 RxURLc /test/prueba.php
 12 RxProtocol   c HTTP/1.1
 12 RxHeader c Connection: TE, close
 12 RxHeader c Host: foo.bar
 12 RxHeader c TE:
 12 RxHeader c User-Agent: lwp-request/5.827 libwww-perl/5.831
 12 VCL_call c recv
 12 VCL_return   c lookup
 12 VCL_call c hash
 12 VCL_return   c hash
 12 VCL_call c miss
 12 VCL_return   c fetch
 14 BackendOpen  b default 10.10.10.10 33484 10.30.30.30 80
 12 Backend  c 14 default default
 14 TxRequestb GET
 14 TxURLb /test/prueba.php
 14 TxProtocol   b HTTP/1.1
 14 TxHeader b Host: foo.bar
 14 TxHeader b User-Agent: lwp-request/5.827 libwww-perl/5.831
 14 TxHeader b X-Varnish: 1655545411
 14 TxHeader b X-Forwarded-For: 10.20.20.20
  0 CLI  - Rd ping
  0 CLI  - Wr 0 200 PONG 1258390564 1.0
 14 RxProtocol   b HTTP/1.1
 14 RxStatus b 200
 14 RxResponse   b OK
 14 RxHeader b Date: Mon, 16 Nov 2009 16:56:01 GMT
 14 RxHeader b Server: Apache
 14 RxHeader b Cache-control: max-age=20
 14 RxHeader b Last-Modified: Mon, 16 Nov 2009 16:56:06 GMT
 14 RxHeader b Connection: close
 14 RxHeader b Transfer-Encoding: chunked
 14 RxHeader b Content-Type: text/html; charset=iso-8859-15
 12 ObjProtocol  c HTTP/1.1
 12 ObjStatusc 200
 12 ObjResponse  c OK
 12 ObjHeaderc Date: Mon, 16 Nov 2009 16:56:01 GMT
 12 ObjHeaderc Server: Apache
 12 ObjHeaderc Cache-control: max-age=20
 12 ObjHeaderc Last-Modified: Mon, 16 Nov 2009 16:56:06 GMT
 12 ObjHeaderc Content-Type: text/html; charset=iso-8859-15
 14 BackendClose b default
 12 TTL  c 1655545411 RFC 20 1258390566 0 0 20 0
 12 VCL_call c fetch
 12 VCL_return   c deliver
 12 Length   c 11013
 12 VCL_call c deliver
 12 VCL_return   c deliver
 12 TxProtocol   c HTTP/1.1
 12 TxStatus c 200
 12 TxResponse   c OK
 12 TxHeader c Server: Apache
 12 TxHeader c Cache-control: max-age=20
 12 TxHeader c Last-Modified: Mon, 16 Nov 2009 16:56:06 GMT
 12 TxHeader c Content-Type: text/html; charset=iso-8859-15
 12 TxHeader c Content-Length: 11013
 12 TxHeader c Date: Mon, 16 Nov 2009 16:56:06 GMT
 12 TxHeader c X-Varnish: 1655545411
 12 TxHeader c Age: 0
 12 TxHeader c Via: 1.1 varnish
 12 TxHeader c Connection: close
 12 ReqEnd   c 1655545411 1258390561.316438675
 1258390566.327898026 0.000134945 5.010995150 0.000464201
 12 SessionClose c Connection: close
 12 StatSess c 10.20.20.20 57909 5 1 1 0 0 1 282 11013

 Step 2

 Then the next request will go with a (Accept-encoding: gzip), and
 returns me a clear object :(

 GET -H Accept-encoding: gzip -H TE: -sed http://foo.bar/test/prueba.php 
 
 200 OK
 Cache-Control: max-age=20
 Connection: close
 Date: Mon, 16 Nov 2009 16:56:09 GMT
 Via: 1.1 varnish
 Age: 3
 Server: Apache
 Content-Length: 11013
 Content-Type: text/html; charset=iso-8859-15
 Last-Modified: Mon, 16 Nov 2009 16:56:06 GMT
 Client-Date: Mon, 16 Nov 2009 16:56:08 GMT
 Client-Peer: 10.10.10.10:80
 Client-Response-Num: 1
 X-Varnish: 1655545412 1655545411

12 SessionOpen  c 10.20.20.20 57910 :80
  

Re: Compressed and uncompressed cached object handling

2009-11-17 Thread Daniel Rodriguez
Hi Michael,

That was the problem, the server was not returning the Vary:
Accept-Encoding, I didn't notice that detail in the headers sent by
the server. Its working perfect right now.

Thank you very much.
Regards,

On Tue, Nov 17, 2009 at 11:42 AM, Michael S. Fischer
mich...@dynamine.net wrote:
 Are you returning a Vary: Accept-Encoding in your origin server's response
 headers?

 --Michael

 On Nov 17, 2009, at 4:01 PM, Daniel Rodriguez wrote:

 Hi guys,

 I'm having a problem with a varnish implementation that we are testing
 to replace an ugly appliance. We were almost ready to place our server
 in a more real  environment (some of our production sites), but I
 found out that there is something not working properly with the
 compression handling in my varnishd (varnish-2.0.5 - Debian)

 Varnish its returning the first object cached no matter if i ask for a
 clear object (no Accept-encoding specified) or a gzip/deflate object.
 If the object cached is a gzip object it will return that no matter if
 I later ask for a clear one later.

 According to what I have seen in the documentation varnish should keep
 both object versions (compressed and no-compressed) in the cache and
 deliver the one that its asked by the client.

 Step 1

 I ask for a non-compressed object (no Accept-encoding specified). This
 works great

 GET -H TE: -sed http://foo.bar/test/prueba.php;
 200 OK
 Cache-Control: max-age=20
 Connection: close
 Date: Mon, 16 Nov 2009 16:56:06 GMT
 Via: 1.1 varnish
 Age: 0
 Server: Apache
 Content-Length: 11013
 Content-Type: text/html; charset=iso-8859-15
 Last-Modified: Mon, 16 Nov 2009 16:56:06 GMT
 Client-Date: Mon, 16 Nov 2009 16:56:06 GMT
 Client-Peer: 10.10.10.10:80
 Client-Response-Num: 1
 X-Varnish: 1655545411

 The request goes like this in the log:

  12 SessionOpen  c 10.20.20.20 57909 :80
    12 ReqStart     c 10.20.20.20 57909 1655545411
    12 RxRequest    c GET
    12 RxURL        c /test/prueba.php
    12 RxProtocol   c HTTP/1.1
    12 RxHeader     c Connection: TE, close
    12 RxHeader     c Host: foo.bar
    12 RxHeader     c TE:
    12 RxHeader     c User-Agent: lwp-request/5.827 libwww-perl/5.831
    12 VCL_call     c recv
    12 VCL_return   c lookup
    12 VCL_call     c hash
    12 VCL_return   c hash
    12 VCL_call     c miss
    12 VCL_return   c fetch
    14 BackendOpen  b default 10.10.10.10 33484 10.30.30.30 80
    12 Backend      c 14 default default
    14 TxRequest    b GET
    14 TxURL        b /test/prueba.php
    14 TxProtocol   b HTTP/1.1
    14 TxHeader     b Host: foo.bar
    14 TxHeader     b User-Agent: lwp-request/5.827 libwww-perl/5.831
    14 TxHeader     b X-Varnish: 1655545411
    14 TxHeader     b X-Forwarded-For: 10.20.20.20
     0 CLI          - Rd ping
     0 CLI          - Wr 0 200 PONG 1258390564 1.0
    14 RxProtocol   b HTTP/1.1
    14 RxStatus     b 200
    14 RxResponse   b OK
    14 RxHeader     b Date: Mon, 16 Nov 2009 16:56:01 GMT
    14 RxHeader     b Server: Apache
    14 RxHeader     b Cache-control: max-age=20
    14 RxHeader     b Last-Modified: Mon, 16 Nov 2009 16:56:06 GMT
    14 RxHeader     b Connection: close
    14 RxHeader     b Transfer-Encoding: chunked
    14 RxHeader     b Content-Type: text/html; charset=iso-8859-15
    12 ObjProtocol  c HTTP/1.1
    12 ObjStatus    c 200
    12 ObjResponse  c OK
    12 ObjHeader    c Date: Mon, 16 Nov 2009 16:56:01 GMT
    12 ObjHeader    c Server: Apache
    12 ObjHeader    c Cache-control: max-age=20
    12 ObjHeader    c Last-Modified: Mon, 16 Nov 2009 16:56:06 GMT
    12 ObjHeader    c Content-Type: text/html; charset=iso-8859-15
    14 BackendClose b default
    12 TTL          c 1655545411 RFC 20 1258390566 0 0 20 0
    12 VCL_call     c fetch
    12 VCL_return   c deliver
    12 Length       c 11013
    12 VCL_call     c deliver
    12 VCL_return   c deliver
    12 TxProtocol   c HTTP/1.1
    12 TxStatus     c 200
    12 TxResponse   c OK
    12 TxHeader     c Server: Apache
    12 TxHeader     c Cache-control: max-age=20
    12 TxHeader     c Last-Modified: Mon, 16 Nov 2009 16:56:06 GMT
    12 TxHeader     c Content-Type: text/html; charset=iso-8859-15
    12 TxHeader     c Content-Length: 11013
    12 TxHeader     c Date: Mon, 16 Nov 2009 16:56:06 GMT
    12 TxHeader     c X-Varnish: 1655545411
    12 TxHeader     c Age: 0
    12 TxHeader     c Via: 1.1 varnish
    12 TxHeader     c Connection: close
    12 ReqEnd       c 1655545411 1258390561.316438675
 1258390566.327898026 0.000134945 5.010995150 0.000464201
    12 SessionClose c Connection: close
    12 StatSess     c 10.20.20.20 57909 5 1 1 0 0 1 282 11013

 Step 2

 Then the next request will go with a (Accept-encoding: gzip), and
 returns me a clear object :(

 GET -H Accept-encoding: gzip -H TE: -sed
 http://foo.bar/test/prueba.php;
 200 OK
 Cache-Control: max-age=20
 Connection: close
 Date: Mon, 16 Nov 2009 16:56:09 GMT
 Via: 1.1 varnish
 Age: 3
 Server: Apache
 Content-Length: 11013
 Content-Type: text/html;