Apahce使用mod_deflate壓縮模塊,客戶端(如浏覽器)每次都會去服務器取數據(ps:Expires沒有過期等情況下),即http請求頭的狀態碼永遠為200,而不會訪回 304 Not Modified。
304 Not Modified?
如果客戶端發送了一個帶條件的GET請求且該請求已被允許,而文檔的內容(自上次訪問以來或者根據請求的條件)並沒有改變,則服務器應當返回這個狀態碼。304響應禁止包含消息體(會節省帶寬和開銷),因此始終以消息頭後的第一個空行結尾。
F5刷新,狀態永遠200,如下圖:
這是Apahce本身的一個bug。Apache同時使用gzip壓縮和緩存,etag名字會自動變成“******-gzip”,當存在gzip時就會出現問題。
如果使用了《OneinStack》和《lnmp一鍵安裝包》(ps:最新下載的已解決這個問題)選擇安裝了lamp模式,將會自動打開的壓縮功能,需要通過如下方法解決此問題:
將文件/usr/local/apache/conf/httpd.conf最後幾行將:
ServerTokens ProductOnly ServerSignature Off AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript DeflateCompressionLevel 6 SetOutputFilter DEFLATE Include conf/vhost/*.conf
替換為:
<IfModule mod_headers.c> AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript <FilesMatch "\.(js|css|html|htm|png|jpg|swf|pdf|shtml|xml|flv|gif|ico|jpeg)$"> RequestHeader edit "If-None-Match" "^(.*)-gzip(.*)$" "$1$2" Header edit "ETag" "^(.*)-gzip(.*)$" "$1$2" </FilesMatch> DeflateCompressionLevel 6 SetOutputFilter DEFLATE </IfModule> ServerTokens ProductOnly ServerSignature Off Include conf/vhost/*.conf
重啟apache:
F5刷新:
原文:https://blog.linuxeye.com/438.html