我尝试在 Ubuntu 20.04 上使用 Apache 启用 brotli。它有效,但不适用于使用 PHP 生成的内容。
它适用于 HTML 文件:
$ curl -v -H "Accept-Encoding: gzip, deflate, br" https://server.tld/pp.html 2>&1 | grep content-encoding
< content-encoding: br
但如果它是 PHP 则不起作用 - 在这种情况下,内容是用“gzip”压缩的:
$ curl -v -H "Accept-Encoding: gzip, deflate, br" https://server.tld/pp.php 2>&1 | grep content-encoding
< content-encoding: gzip
奇怪的是,如果我将“br”指定为“Accept-Encoding”中的唯一值(浏览器使用“gzip,deflate,br”),它确实适用于 PHP:
$ curl -v -H "Accept-Encoding: br" https://server.tld/pp.php 2>&1 | grep content-encoding
< content-encoding: br
那么,这里有什么问题呢?
我通过运行启用了 brotli:
a2enmod brotli
并将以下部分添加到虚拟主机(随后是 apache 重启):
AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/xml text/css text/javascript application/x-javascript application/javascript application/json application/x-font-ttf application/vnd.ms-fontobject image/x-icon