- 操作系统:Ubuntu 14.04
- 阿帕奇:2.4.12(使用 PPA) -mod_expires、mod_headers
我对所有 SVG 文件都使用 GZIP。它与配置文件(不是 .htaccess)中的以下语句配合得很好
AddType image/svg+xml .svg
AddOutputFilterByType DEFLATE image/svg+xml
但是,按下 F5 键后,浏览器会向服务器请求文件并返回200状态代码未返回预期304状态代码。
如果我删除按类型添加输出过滤器然后服务器返回304但内容并未经过 GZIP 压缩。
以下是一些原始请求标头
无 GZIP(200 状态代码)
Accept-Ranges: bytes
Cache-Control: max-age=2592000
Connection: Keep-Alive
Content-Length: 689
Content-Type: image/svg+xml
Date: Thu, 02 Jul 2015 10:41:09 GMT
Etag: "2b1-5157f331b2480"
Expires: Sat, 01 Aug 2015 10:41:09 GMT
Keep-Alive: timeout=5, max=80
Last-Modified: Thu, 07 May 2015 15:02:26 GMT
Server: Apache
无 GZIP(304 状态代码)
Cache-Control: max-age=2592000
Connection: Keep-Alive
Date: Thu, 02 Jul 2015 10:39:12 GMT
Etag: "2b1-5157f331b2480"
Expires: Sat, 01 Aug 2015 10:39:12 GMT
Keep-Alive: timeout=5, max=71
Server: Apache
使用 GZIP
Accept-Ranges: bytes
Cache-Control: max-age=2592000
Connection: Keep-Alive
Content-Encoding: gzip
Content-Length: 451
Content-Type: image/svg+xml
Date: Thu, 02 Jul 2015 10:38:45 GMT
Etag: "2b1-5157f331b2480-gzip"
Expires: Sat, 01 Aug 2015 10:38:45 GMT
Keep-Alive: timeout=5, max=75
Last-Modified: Thu, 07 May 2015 15:02:26 GMT
Server: Apache
Vary: Accept-Encoding
谢谢你!
答案1
这是 Apache 的一个错误,它无法正确处理 gzip 内容的 Etag。可以通过关闭 gzip(正如您所注意到的 - 但性能会受到影响)或关闭 ETag(并依赖于 304 的 Last-Modified 标头 - 因此没有实际损失)来解决。我更喜欢关闭 ETag。
还有另一种选择(DeflateAlterETag),但仅限于 Apache 2.5,而且对我来说这似乎是一种捏造。
更多详情请点击这里:为什么当 Last-modified 与 If-modified-since 匹配时 Apache 会发送 200 OK?