HTTP頭的Expires與Cache-control區別


2010年3月24日 a18ccms 發表評論 閱讀評論

今天在群里聊天。說道了Expires。這里來說明下這兩個的區別吧。
1.概念
Cache-control 用於控制HTTP緩存(在HTTP/1.0中可能部分沒實現,僅僅實現了 Pragma: no-cache)
Expires 表示存在時間,允許客戶端在這個時間之前不去檢查(發請求),等同max-age的效果。但是如果同時存在,則被Cache-Control的max-age覆蓋。

2格式
Cache-control:
數據包中的格式:

Cache-Control: cache-directive

cache-directive可以為以下:

request時用到:

| "no-cache"
| "no-store"
| "max-age" "=" delta-seconds
| "max-stale" [ "=" delta-seconds ]
| "min-fresh" "=" delta-seconds
| "no-transform"
| "only-if-cached"
| "cache-extension"

response時用到:

| "public"
| "private" [ "=" <"> field-name <"> ]
| "no-cache" [ "=" <"> field-name <"> ]
| "no-store"
| "no-transform"
| "must-revalidate"
| "proxy-revalidate"
| "max-age" "=" delta-seconds
| "s-maxage" "=" delta-seconds
| "cache-extension"

部分說明:
根據是否可緩存分為
Public 指示響應可被任何緩存區緩存。
Private 指示對於單個用戶的整個或部分響應消息,不能被共享緩存處理。這允許服務器僅僅描述當用戶的
部分響應消息,此響應消息對於其他用戶的請求無效。
no-cache 指示請求或響應消息不能緩存(HTTP/1.0用Pragma的no-cache替換)
根據什么能被緩存
no-store 用於防止重要的信息被無意的發布。在請求消息中發送將使得請求和響應消息都不使用緩存。
根據緩存超時
max-age 指示客戶機可以接收生存期不大於指定時間(以秒為單位)的響應。
min-fresh 指示客戶機可以接收響應時間小於當前時間加上指定時間的響應。
max-stale 指示客戶機可以接收超出超時期間的響應消息。如果指定max-stale消息的值,那么客戶機可以接收超出超時期指定值之內的響應消息。

Expires:
數據包中的格式:
Expires = "Expires" ":" HTTP-date
例如
Expires: Thu, 01 Dec 1994 16:00:00 GMT (必須是GMT格式)

3.應用
通過HTTP的META設置expires和cache-control

1
2
< meta http-equiv = "Cache-Control" content = "max-age=7200" />
< meta http-equiv = "Expires" content = "Mon, 20 Jul 2009 23:00:00 GMT" />

上述設置僅為舉例,實際使用其一即可。這樣寫的話僅對該網頁有效,對網頁中的圖片或其他請求無效,並不會做任何cache。
這樣客戶端的請求就多了,盡管只是檢查Last-modified狀態的東西,但是請求一多對瀏覽速度必定有影響。

如果要對文件添加cache可以通過apache的mod_expire模塊,寫法為

1
2
3
4
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 days"
< /IfModule >

記得ExpiresActive設為On,我起先沒設置On,似乎怎樣YSlow都查不到緩存機制。這樣添加的話就是默認所有的。

如果要針對個別MIME類型則可以:
ExpiresByType image/gif "access plus 5 hours 3 minutes"
Apache Module mod_expires
另外,當點擊瀏覽器上的刷新,客戶端發送的請求中均是max-age=0,表示validate操作,發送請求到服務器
要求檢查cache,再更新cache,一般得到的是304 Not Modified,表示沒變動。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM