压缩节省传输字节,但也制造了资源的另一种表示。客户端用 Accept-Encoding 声明可接受的内容编码;服务器用 Content-Encoding 描述实际应用的编码。

让协商可见

当响应可能随 Accept-Encoding 变化时,把该请求字段写进 Vary。这告诉共享缓存:压缩响应与 identity 响应不是可互换的缓存条目。

不要只检查一个浏览器请求,而是比较两条路径:

curl -sS -D - -o /dev/null \
  -H 'Accept-Encoding: identity' https://www.example.test/
curl -sS --compressed -D - -o /dev/null \
  https://www.example.test/

检查 Content-EncodingVaryContent-Length(如存在)与验证器。服务器可为不同编码的表示使用不同实体标签;重要的是条件请求一致地验证同一个所选表示。

压缩合适的内容

HTML、CSS、JSON、XML、SVG 等文本格式通常适合压缩;已经压缩过的格式未必适合。Caddy 的 encode 指令会协商支持的编码,并且通常对没有合适内容类型或体积过小的响应不做压缩。

不要为了满足某个评分而加压缩。测量一个有代表性的响应,确认边缘返回预期的头,并核验可下载文件在传输解码后仍保留正确的内容类型与校验和。

来源