本文轉自:http://niutuku.com/tech/www/271454.shtml
對於頁面中不經常變化的靜態內容通過指定expires頭,來進行瀏覽器端的緩存,減少每次訪問時的請求。
原理:對於頁面中不經常變化的靜態內容通過指定expires頭,來進行瀏覽器端的緩存,減少每次訪問時的請求。
實現:
1、IIS下的實現參考
為靜態文件(js,css,image)設置客戶端緩存是前端優化的重要法則之一,通過IIS為靜態文件設置過期頭(Expires headers)很方便,
1.打開IIS管理器;
但是這樣操作,web的整個站的所有的靜態文件的緩存時間都一樣,如果我們希望為不同的靜態文件添加不同的緩存時間,比如有些文件很久不改變希望緩存時間長些,有些希望緩存時間短些。一直我以為IIS不可以做到,需要編程的方式管理,在google上搜索也無果,最后在stackoverflow提問(iis only Add Expires headers to images),很長時間沒人回答(),不過最終還是有人解答了。
操作起來還是很簡單,下面以添加某一個JS文件的緩存時間為例:
1. 在IIS管理器下點擊該文件的文件夾並切換到內容視圖
2. 選中要設置的js文件,如上圖的jquery-1.3.2.js,右鍵切換到功能視圖,這時看到的IIS管理台內容是
雙擊上圖的HTTP響應標頭就可以像為整個站點設置過期時間一樣的操作。
上面的操作最終還是生成web.config的配置,經過上面的設置你會發現在Script文件夾下生成了一個web.config配置文件,打開發現內容如下
這樣就明白了通過上面在IIS管理器的“繁瑣”的界面操作可以通過簡單的web.config中配置即可,
比如我要我整個Script文件夾設置統一的過期日期,只用添加一個location節即可
2、java的實現
mod_expires Apache 模塊,具體還沒研究如何用
win2000+apache2.0.54+tomcat5.0.28 現在想在某些目錄上設置網頁過期時間。 當寫法是在httpd.conf的后面直接加 ExpiresActive on ExpiresDefault "access plus 50 hour " 時,網站全部網頁和圖片等內容起作用。
當我想只配置某個特定的目錄起作用時。寫法改為: <Directory "D:/Tomcat/webapps/ROOT "> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all ExpiresActive on ExpiresDefault "access plus 50 hour " < /Directory>
結論:
通過對指定不同的expires頭來達到緩存查找的目的,如果靜態內容有變化,可通過對應文件名稱改變的方式來進行督促瀏覽器更新緩存。最好采用名稱加版本號的方式對靜態文件進行命名。
所針對的緩存對象為不經常改變的任何靜態內容,不只是局限於圖片,像css、js、flash都可以。
http1.1引入了cache-control來解決expires頭需要客戶端和服務器端時鍾嚴格同步的問題。
cache-control通過max-age(以秒為單位)來指定多長時間以后過期。