通常的方法來處理這樣的問題,與HTTP緩存頭,再加上網址的智能建築爲您的網頁引用的資源。
的總體思路是這樣的:通過您的網頁加載(圖片,腳本,CSS文件等),每個資源應該有一個唯一的,版本URL。例如,不是加載/images/button.png
,而是加載/images/button_v123.png
,當您更改該文件時,其URL將更改爲/images/button_v124.png
。通常情況下,這是通過對靜態文件URL進行URL重寫來處理的,例如,Web服務器知道/images/button_v124.png
實際上應該從Web服務器的文件系統加載/images/button.png
文件。創建版本號可以通過附加內部編號,使用文件內容的CRC或許多其他方式來完成。
然後,你需要確保的是,無論在網址父頁面構造,它們指的版本URL。這顯然需要用於構建所有URL的動態代碼,可以通過調整用於生成頁面的代碼或影響所有text/html
請求的服務器級插件來完成。
然後,您將所有資源請求(圖像,腳本,CSS文件等)的標頭設置爲遠期日期(例如,從現在開始的10年)的標頭Expires
。這有效地緩存他們永遠。這意味着每個頁面加載的所有請求都將始終從緩存中獲取;緩存失效從不發生,這是可以的,因爲當底層資源發生變化時,父頁面將使用新的URL來查找它。
最後,你需要弄清楚要如何緩存你的「父母」頁面。你如何做到這一點是一個判斷呼叫。您可以使用ETag
/If-None-Match
HTTP標頭每次檢查頁面的新版本,如果服務器報告它沒有更改,它將非常快速地從緩存中加載頁面。或者,在檢查服務器之前,您可以使用Expires
(和/或Max-Age
)在指定的時間段內從緩存中重新加載父頁。
如果你想要做更復雜的東西,你可以隨時把自定義代理服務器上的kiosk--在你不得不在高速緩存是如何完成的總,集中控制這種情況。
嗨,你如何看待在資源中添加「版本查詢參數」的方法?因此,您將在應用程序中使用一個小的非緩存資源來返回應用程序的版本,併爲每個url添加版本(例如:/ images/button?version = v124)。這種方法的好處是在應用程序服務器端的可維護性。 – 2012-02-17 11:03:35