Ubuntu
將 SVG 作為 GZIP 服務不會在後續請求中記憶體它
- 作業系統:Ubuntu 14.04
- Apache: 2.4.12(使用 PPA)- mod_expires、mod_headers
我對所有 SVG 文件使用 GZIP。它適用於配置文件中的以下語句(不是 .htaccess)
AddType image/svg+xml .svg AddOutputFilterByType DEFLATE image/svg+xml
但是,點擊 F5,瀏覽器將向伺服器請求文件,返回200狀態碼,而不是返回預期的304狀態碼。
如果我刪除AddOutputFilterByType則伺服器返回304但內容不是 GZIPped。
這是一些原始請求標頭
無 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
謝謝!
這是 Apache 中的一個錯誤,它不能正確處理 gzip 內容的 Etags。可以通過關閉 gzip(正如您已經註意到的那樣 - 但會帶來性能損失)或關閉 ETags(並且取決於 304 的 Last-Modified 標頭 - 所以沒有真正的損失)來解決。我更喜歡關閉 ETags。
還有一個替代選項(DeflateAlterETag),但僅在 Apache 2.5 中,即使這對我來說似乎也是一種軟糖。
此處有更多詳細資訊:為什麼 Apache 在 Last-modified 匹配 If-modified-since 時發送 200 OK?