perf(caddy): encode 提到 handle 之前,API 响应终于会被压缩

抓包发现订单列表响应 75.9KB 明文下发(客户端已发 Accept-Encoding: gzip, br,
响应既无 content-encoding 也无压缩)。原因在 Caddyfile:`encode zstd gzip` 写在
`handle /api/*` 之后,而 Caddy 的 route 按书写顺序执行、handle 匹配后即终止链路,
于是所有 API 响应都绕过了编码器;静态文件一直是压缩的,只是因为它们落在 encode
之后的 file_server。

把 encode 提到 route 内最前面即可(SSE 的 text/event-stream 不在 encode 默认
压缩类型里,事件流不受影响)。后台与打手端 API 同时受益。

验证:部署后 curl 订单列表应出现 content-encoding: gzip 且体积大幅下降;
静态资源仍然压缩;/api/v1/admin/realtime 仍正常流式返回。
This commit is contained in:
yml2213
2026-10-01 15:39:03 +08:00
parent 5092e88618
commit 1f8252a6bc
+6 -1
View File
@@ -1,5 +1,11 @@
(order-site) {
route {
# 必须放在 handle 之前:Caddy 的 route 按书写顺序执行,而 handle 匹配后即终止链路,
# 放在后面会让**所有 API 响应都跳过压缩**(生产实测订单列表 75.9KB 明文下发,
# 客户端已发 Accept-Encoding: gzip, br)。静态文件之所以一直是压缩的,
# 是因为静态文件落在 encode 之后的 file_server。SSE 响应不会被压缩(见 encode 默认规则)。
encode zstd gzip
handle /api/* {
reverse_proxy backend:3000
}
@@ -12,7 +18,6 @@
reverse_proxy backend:3000
}
encode zstd gzip
root * /srv
try_files {path} /index.html
file_server