gzip/esi
Artur Bergman
sky at crucially.net
Wed Jul 2 18:19:23 CEST 2008
Hi,
So there is a problem with gzip and ESI. If the content is gziped,
you can't ESI it. If it isn't you waste bandwidth and go slower. Once
you have the esibits tree up and running, if each individual chunk is
gziped, you can just blast it away. So here is a proposal.
Add a new action named encode; to be used after esi; . encode will
take the current object, clone it and encode it to match your accept-
encoding, insert it into the objhead and then replace the current
working object.
VCL example
sub recv {
lookup;
}
sub miss {
# save away the accept-encoding and make sure
# we request it uncompressed so we can ESI it
set req.http.tmp_accept_encoding = req.http.Accept-Encoding;
set req.http.Accept-Encoding = "";
}
sub fetch {
# xxx need a nicer way for this?
esi;
if(req.http.tmp_accept_encoding ~ /gzip/) {
#client wants it gziped
encode("gzip");
set req.http.Accept-Encoding = "gzip";
set obj.http.Content-Encoding = "gzip";
}
insert; # inserts both variants of the object - in the future
lookup will get the right version
}
The cloned object basically gets a copy of he store and the esibits,
and then compresses each individual chunk.
Cheers
Artur
More information about the varnish-dev
mailing list