Monday, 15 October 2007
In Reduce Bandwidth Usage by Supporting If-Modified-Since in PHP, I identified one way to reduce your bandwidth usage — use the appropriate HTTP headers to avoid sending content that hasn't changed. Another way to reduce your bandwidth usage is to compress your pages.
Accept-Encoding HTTP header is used by browsers to specify potential encodings for a requested web page. For
Firefox, this is generally set to "gzip, deflate", meaning that the browser will accept (and decompress) web pages compressed with
the gzip or deflate compression algorithms. The web server can then use the
Content-Encoding header to indicate that it
has used a particular encoding for the served page. The
Vary header is used to tell the browser or proxy that different
encodings can be used. For example, if the server compresses the page using gzip, then it will return headers that say
Content-Encoding: gzip Vary: Accept-Encoding
Handling compression in PHP
For static pages, compression is handled by your web server (though you might have to configure it to do so). For pages generated with PHP you are in charge. However, supporting compression is really easy. Just add:
to the start of the script. It is important that this comes before any output has been written as in order to compress the output, all output has to be passed through the filter, and the headers have to be set. If any content has already been sent to the browser, then this won't work, which is why I put it at the start of the script — that way, there's not much chance of anything interfering.