Ubuntu

將 SVG 作為 GZIP 服務不會在後續請求中記憶體它

  • July 29, 2015
  • 作業系統: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?

引用自:https://serverfault.com/questions/703076