HTTP头中有个expires参数,设置一个未来的时间,在这时间以前,浏览器会先从cache读取,如果没有再从服务器中读取。对于像图片,css,script等静态内容,只需发一次http request就可,以后就可从cache中读取,一方面提高了响应时间,也减少了http rquest的次数。
具体的格式如下: Expires = "Expires" ":" HTTP-date。
Example: Expires: Thu, 01 Dec 2010 16:00:00 GMT.
Expires有个缺点就是它只能设置绝对时间,这样每当到达预设时间点后必须重设expires值。HTTP/1.1提供了一个新的参数cache-control可以设置相对时间。
Cache-Control:Max-age
Cache-Control使用max-age直接指定component能被缓存多长时间. 它定义了新的方式用秒为单位. 假如当前时间与上次返回时间差小于上次返回的max-age,那么浏览器使用缓存的版本。如果需要缓存10年,你可以这样指定:
Cache-Control: max-age=315360000
PS: 如果同时设置了cache-control和expires,cache-control会覆盖expires。
Apache中配置expires
Apache提供了mod_expires.so模块,可以轻松的设置expires值,以下是配置的范例:
LoadModule expires_module modules/mod_expires.so
ExpiresActive On
ExpiresDefault "access plus 300 seconds" #默认300秒过期
<Directory "/myProject/webResources"> #文件所在目录
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
ExpiresByType text/html "access plus 1 day" #设置cache时间为1天
ExpiresByType text/css "access plus 1 day"
ExpiresByType text/javascript "access plus 1 day"
ExpiresByType image/gif "access plus 1 day"
ExpiresByType image/jpg "access plus 1 day"
ExpiresByType image/png "access plus 1 day"
ExpiresByType application/x-shockwave-flash "access plus 1 day"
参考文档:
1. http://kuppalli.wordpress.com/2009/07/14/apache-configuration-for-etags-gzip-and-expires-header/
2. http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32
3. http://www.meichua.com/archives/168.html