客戶端從服務器請求數據經歷如下基本步驟:
1、如果請求命中本地緩存則從本地緩存中獲取一個對應資源的"copy";
2、檢查這個"copy"是否fresh,是則直接返回,否則繼續向服務器轉發請求。
3、服務器接收到請求,然后判斷資源是否變更,是則返回新內容,否則返回304,未變更。
4、客戶端更新本地緩存。
no-cache的作用是:強制客戶端跳過步驟2,直接向服務器發送請求。也就是說每次請求都必須向服務器發送。
must-revalidate:作用與no-cache相同,但更嚴格,強制意味更明顯。但 這只是理論上的描述,根據我在ff6上的測試,它幾乎不起作用:只要請求的頻率加快到一定程度,服務器就接收不到請求。
no-store:緩存將不存儲response,包括header和body。測試結果表明,除每次請求都必發送到服務器外,響應代碼均是200,且request並沒有發送"If-Modified-Since"和"If-None-Match"頭,這意味着緩存的確沒有存儲response。
以上三者都是要求客戶端每次請求都必須到服務器進行revalidate,此功能還可以通過max-age實現:
測試結果證明了這一點,每次都請求了服務器,且狀態碼是304。
這種設置方式大部分服務器不支持,額外的解析成本、只支持html文件等原因造成的結果是,它基本上是無效的。
1、如果請求命中本地緩存則從本地緩存中獲取一個對應資源的"copy";
2、檢查這個"copy"是否fresh,是則直接返回,否則繼續向服務器轉發請求。
3、服務器接收到請求,然后判斷資源是否變更,是則返回新內容,否則返回304,未變更。
4、客戶端更新本地緩存。
no-cache的作用是:強制客戶端跳過步驟2,直接向服務器發送請求。也就是說每次請求都必須向服務器發送。
must-revalidate:作用與no-cache相同,但更嚴格,強制意味更明顯。但 這只是理論上的描述,根據我在ff6上的測試,它幾乎不起作用:只要請求的頻率加快到一定程度,服務器就接收不到請求。
no-store:緩存將不存儲response,包括header和body。測試結果表明,除每次請求都必發送到服務器外,響應代碼均是200,且request並沒有發送"If-Modified-Since"和"If-None-Match"頭,這意味着緩存的確沒有存儲response。
以上三者都是要求客戶端每次請求都必須到服務器進行revalidate,此功能還可以通過max-age實現:
- Cache-Control:max-age=0
- <META HTTP-EQUIV="Cache-control" CONTENT="no-cache">
這種設置方式大部分服務器不支持,額外的解析成本、只支持html文件等原因造成的結果是,它基本上是無效的。