1. 程式人生 > >web app禁用手機瀏覽器快取

web app禁用手機瀏覽器快取

最近做移動端開發碰到這煩人的事情,JS或CSS程式碼改變,可手機瀏覽器怎麼重新整理都不更新,手機瀏覽器的快取特別惡劣。   所以今天貼個方法解決這問題。記得,本地除錯的時候貼上,上線後要刪除哦,免得訪問者瀏覽體驗慢。   程式碼:   <meta http-equiv="expires" content="0"> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache">  把上面的程式碼貼到HEAD裡面即可。       順便貼個快取的資料:   1.概念   Cache-control用於控制HTTP快取(在HTTP/1.0中可能部分沒實現,僅僅實現了Pragma: no-cache)   資料包中的格式:   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 表示存在時間,允許客戶端在這個時間之前不去檢查(發請求),等同max-age的 效果。但是如果同時存在,則被Cache-Control的max-age覆蓋。 格式: Expires = "Expires" ":" HTTP-date 例如 Expires: Thu, 01 Dec 1994 16:00:00 GMT (必須是GMT格式)   2.應用 通過HTTP的META設定expires和cache-control <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模組,寫法為 <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,表示沒變動。