優化建議解決方案:未設置max-age或expires

網頁的緩存是由 HTTP 消息頭中的 「Cache-control」 來控制的,常見的取值有 private、no-cache、max-age、must-revalidate 等,默認爲private。其做用根據不一樣的從新瀏覽方式分爲如下幾種狀況:css

(1) 打開新窗口緩存

若是指定cache-control的值爲private、no-cache、must-revalidate,那麼打開新窗口訪問時都會從新訪問服務器。而若是指定了max-age值,那麼在此值內的時間裏就不會從新訪問服務器,例如:服務器

Cache-control: max-age=5 表示當訪問此網頁後的5秒內再次訪問不會去服務器。app

(2) 在地址欄回車字體

若是值爲private或must-revalidate(和網上說的不同),則只有第一次訪問時會訪問服務器,之後就再也不訪問。若是值爲no-cache,那麼每次都會訪問。若是值爲max-age,則在過時以前不會重複訪問。ui

(3) 按後退按扭url

若是值爲private、must-revalidate、max-age,則不會重訪問,而若是爲no-cache,則每次都重複訪問對象

(4) 按刷新按扭圖片

不管爲什麼值,都會重複訪問it

當指定Cache-control值爲「no-cache」時,訪問此頁面不會在Internet臨時文章夾留下頁面備份。

另外,經過指定「Expires」值也會影響到緩存。例如,指定Expires值爲一個早已過去的時間,那麼訪問此網時若重複在地址欄按回車,那麼每次都會重複訪問:

Expires: Fri, 31 Dec 1999 16:00:00 GMT

在ASP中,能夠經過Response對象的Expires、ExpiresAbsolute屬性控制Expires值;經過Response對象的CacheControl屬性控制Cache-control的值,例如:

Response.ExpiresAbsolute = #2000-1-1# ‘ 指定絕對的過時時間,這個時間用的是服務器當地時間,會被自動轉換爲GMT時間 Response.Expires = 20 ‘ 指定相對的過時時間,以分鐘爲單位,表示從當前時間起過多少分鐘過時。 Response.CacheControl = "no-cache" Expires值是能夠經過在Internet臨時文件夾中查看臨時文件的屬性看到的。

Apache 主機解決方案:

Apache 設置緩存能夠經過 mod_headers 模塊修改 cache-control 來實現。

header set cache-control "max-age="3600"。 mod_expires 實例:

<Directory /opt> ExpiresActive On ExpiresDefault "accesss plus 3600 seconds" 若是是1秒,後面也是seconds ExpiresByType application/octet-stream "accesss plus 1 months" 這是對特殊文件類型bin緩存1個月 <FilesMatch ^data.swf$> 針對opt目錄下data.swf設置Expire值 ExpiresActive On ExpiresDefault "accesss plus 60 seconds" </FilesMatch> </Directory> mod_headers 實例:

<Directory /opt> header set cache-control "max-age=3600" <FilesMatch ^data.swf$> header set cache-control "max-age=60" </FilesMatch> </Directory> <FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$"> Header set Cache-Control "max-age=2592000" </FilesMatch>

Nginx 主機解決方案:

Nginx 的 ngx_http_headers_module 模塊能夠對 Cache-Control 頭相關的東西進行配置,例如:

if ($request_uri ~* "^/$|^/search/.+/|^/company/.+/") { add_header Cache-Control max-age=3600; } if ($request_uri ~* "^/search-suggest/|^/categories/") { add_header Cache-Control max-age=86400; } expires 的設置方法,增長至主機 conf 文件中:

location ~ ..(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .(ico|gif|jpg|jpeg|png|bmp|swf)(?[0-9]+)?$ { expires max; break; }

經過 HTTP 的 META 設置 expires 和 cache-control 解決方案:

<meta http-equiv="Cache-Control" content="max-age=7200" /> <meta http-equiv="Expires" content="Mon, 18 Aug 2014 23:00:00 GMT" /> expires 用於設定網頁的過時時間,也可設置爲:

<meta http-equiv="Cache-Control" CONTENT="no-cache"> <meta http-equiv="Expires" content="0" />

CSS 中圖片、字體及 JS 的 max_age 解決方案:

background-image:url(sprite/bg.png?max_age=31536000&d=05231747) 格式爲?d=月日小時分鐘,其餘文件如此類推。

相關文章
相關標籤/搜索