我目前使用 Webpack 的 BrotliPlugin 编译我的资产,它会创建一个单独的文件,brotli-encoded,即:
style.css
style.cssb
这是我想要实现的目标:考虑 HTML 页面请求style.css
。
如果
- 用户发送
br
到其Accept-Encoding
请求标头的 - 并且相应的 brotli 文件存在(
style.cssb
在本例中):
然后
- 提供相应的 brotli 文件内容
style.cssb
- 带有
Content-Type: text/css
响应头 - 带有
Content-Encoding: br
响应头
否则
- 正常行事,只需服务
style.css
以下是我目前的配置的一部分:
map $http_accept_encoding $accepts_brotli {
default false;
"~*br" true;
}
location ~* (.*).(css|js)$ {
set $brotli_uri "${uri}b";
set $brotli_file "${request_filename}b";
set $should_use_brotli "";
if ($accepts_brotli = true) {
set $should_use_brotli "Y";
}
if (-f $brotli_file) {
set $should_use_brotli "${should_use_brotli}Y";
}
if ($should_use_brotli = YY) {
add_header X-URI $brotli_uri;
add_header Content-Encoding br;
}
add_header X-FOO "bar";
try_files $brotli_uri $uri;
}
结果:
- 响应中存在 X-URI
- X-FOO 不是
- 仍提供未压缩的内容
我究竟做错了什么?