http協議-緩存控制:no-cache/must-revalidate/no-store


  客戶端從服務器請求數據經歷如下基本步驟: 
  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實現: 
 
Java代碼   收藏代碼
  1. Cache-Control:max-age=0  
測試結果證明了這一點,每次都請求了服務器,且狀態碼是304。 
 
Java代碼   收藏代碼
  1. <META HTTP-EQUIV="Cache-control" CONTENT="no-cache">  

這種設置方式大部分服務器不支持,額外的解析成本、只支持html文件等原因造成的結果是,它基本上是無效的。


免責聲明!

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



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