Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
litespeed_wiki:cache:common:gzip-brotli-automatic-conversion [2018/08/17 20:43] Jackson Zhang |
litespeed_wiki:cache:common:gzip-brotli-automatic-conversion [2020/03/31 02:34] (current) Joshua Reynolds [LSWS v5.3 Brotli and gzip Enhancements] link to gzip page |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Brotli compression for dynamic responses and automatic GZIP and BROTLI conversion for cached pages ====== | + | ====== LSWS v5.3 Brotli and gzip Enhancements ====== |
- | LSWS has added brotli compression support for a while, but it used to be for static files only. Starting with LSWS 5.3, Brotli compression for dynamic responses has been added. Also, LSWS will do automatic GZIP and BROTLI conversion for cached pages. | + | LiteSpeed Web Server has included [[litespeed_wiki:config:brotli:start|brotli]] compression support for a while, but it was only for static files. As of v5.3, brotli compression has been added for dynamic responses. Additionally, automatic [[litespeed_wiki:config:gzip-compression|gzip]] and brotli conversion has been added for cached pages. |
- | ===== Brotli compression for dynamic pages ===== | + | ===== Brotli Compression for Dynamic Pages ===== |
- | To test brotli compression, the client (browser) must be Brotli compatible. Google Chrome: Chrome 49+ and Mozilla Firefox: Firefox 44+ are good for brotli testing. Also, you will need to run test over an HTTPS connection, can not be a HTTP connection. | + | To test Brotli compression, the client (browser) must be Brotli compatible. Google Chrome v49+ and Mozilla Firefox v44+ are both good candidates for Brotli testing. Also, you will need to run tests over an HTTPS connection. It cannot be an HTTP connection. |
- | wich Negotiation is done via the Accept-Encoding: br request header. Servers can add "br" to Content-Encoding: br to encode a response with Brotli. | + | Negotiation is done via the ''Accept-Encoding: br'' request header. Servers can add "br" to ''Content-Encoding: br'' to encode a response with Brotli. |
- | The following page header shows "Content-Encoding:gzip", since it is only HTTP connection for the same domain. | + | The following page header shows ''Content-Encoding:gzip'', since it is only an HTTP connection. |
{{ :litespeed_wiki:cache:common:lsws5.3-br-gzip-auto-convertion1.png?600 |}} | {{ :litespeed_wiki:cache:common:lsws5.3-br-gzip-auto-convertion1.png?600 |}} | ||
- | When we test HTTPS connection for the same domain, the header shows "Content-Encoding:br". | + | |
+ | When we test an HTTPS connection for the same domain, the header shows ''Content-Encoding:br''. | ||
{{ :litespeed_wiki:cache:common:lsws5.3-br-gzip-auto-convertion2.png?600 |}} | {{ :litespeed_wiki:cache:common:lsws5.3-br-gzip-auto-convertion2.png?600 |}} | ||
- | You should test a page without ESI on it, such as a https wordpress page as indicated as above. LSWS will use brotli compression as default instead of gzip as far as client supports it(make sure to test HTTPS connection instead of HTTP). However, for ESI pages, gzip compression will be used since LiteSpeed cached ESI pages are optimized for gzip, such as a Magento page. | + | Good pages to test include any HTTP WordPress pages without ESI on them, like above. LSWS will use Brotli compression by default, instead of gzip, as long as the client supports it. (Make sure to test an HTTPS connection instead of HTTP.) For ESI pages, however, gzip compression will be used. This is because LiteSpeed-cached ESI pages, such as on a Magento site, are optimized for gzip. |
- | The following image shows even "accept-encoding: br" sent but still return "content-encoding: gzip" since it is a ESI Magento page. | + | The following image shows ''Accept-Encoding: br'' is sent, but ''Content-Encoding:gzip'' is returned since it is an ESI Magento page. |
- | ===== Automatic GZIP and BROTLI conversion for cached pages ===== | + | {{ :litespeed_wiki:cache:common:lsws5.3-br-gzip-auto-convertion3.png?600 |}} |
- | LSWS 5.3 can cache both br and gzip compressed copy and convert from between them and cache the result. To save on disk space, there is a hit limits to trigger LSWS to save the other compress result. For example, if br version is cached, and client request gzip, it will dynamically decompress br, then compress as gzip, the result is discarded. If there are more than 10 such requests, the gzip version will be cached, next request will be served directly from cache. To avoid misleading benchmark results, LSWS and ADC will immediately cache the result for different compression version if a benchmark tool has been detected via User-Agent, not to dynamically expand when Accept-Encoding request header is not set. Currently, "Apache Bench" is detected. | + | ===== Automatic gzip and Brotli Conversion for Cached Pages ===== |
- | To test the cache engine, we will use two browsers to make such testing, one(Chrome) uses BR encoding, one(Firefox) use GZIP encoding. | + | LSWS 5.3 can cache both Brotli- and gzip-compressed copy, convert between them, and cache the result. |
- | First, use Chrome, you will see "content-encoding: br" on both first visit cache miss and second visit cache hit. | + | To save on disk space, there is a hit limit before LSWS is triggered to save the other compression result. For example, if the Brotli version is cached, and the client requests gzip, LSWS will dynamically decompress the Brotli version, re-compress as gzip, serve the resquest, and discard the result. If there are more than 10 such requests, the gzip version will be cached, and the next request will be served directly from cache. To avoid misleading benchmark results, LSWS and ADC will immediately cache the result for a different compression version, if a benchmark tool has been detected via User-Agent. When Accept-Encoding request header is not set, the result will not dynamically expand. Currently, "Apache Bench" is detected. |
+ | |||
+ | To test the cache engine, we will use two browsers: Chrome, using Brotli encoding, and Firefoc using gzip encoding. | ||
+ | |||
+ | First, use Chrome. You will see ''Content-Encoding: br'' on both the first visit cache miss and the second visit cache hit. | ||
First Visit: | First Visit: | ||
Line 32: | Line 37: | ||
{{ :litespeed_wiki:cache:common:lsws5.3-br-gzip-auto-convertion5.png?600 |}} | {{ :litespeed_wiki:cache:common:lsws5.3-br-gzip-auto-convertion5.png?600 |}} | ||
- | Second, use Firefox and manipulate Accept-encoding to gzip only "Accept-encoding:gzip". | + | Next, use Firefox, and manipulate Accept-Encoding to gzip only: ''Accept-Encoding:gzip''. |
- | First Visit, you will still see "content-encoding: br" since it is default setting. Also it is a cached page. | + | On the first visit, you will still see ''Content-Encoding: br'' since it is the default setting. Also, it is a cached page. |
{{ :litespeed_wiki:cache:common:lsws5.3-br-gzip-auto-convertion6.png?600 |}} | {{ :litespeed_wiki:cache:common:lsws5.3-br-gzip-auto-convertion6.png?600 |}} | ||
- | Use "edit and send" to change to "Accept-encoding:gzip": | + | Edit and press **Send** to change the header to ''Accept-Encoding:gzip'': |
{{ :litespeed_wiki:cache:common:lsws5.3-br-gzip-auto-convertion7.png?600 |}} | {{ :litespeed_wiki:cache:common:lsws5.3-br-gzip-auto-convertion7.png?600 |}} | ||
- | After "send", you will see the cached page has been auto converted to gzip compression even initial cached version was br compression version. | + | After sending, you will see the cached page has been auto converted to gzip compression, even though the initial cached version was Brotli compressed. |
{{ :litespeed_wiki:cache:common:lsws5.3-br-gzip-auto-convertion8.png?600 |}} | {{ :litespeed_wiki:cache:common:lsws5.3-br-gzip-auto-convertion8.png?600 |}} | ||