关于客户端缓存

Expires Header
  浏览器使用缓存来减少HTTP请求数和减少HTTP的响应数据量,以达到更快的加载页面。web服务器通过Expries header来告诉web客户端当前返回的组件在指定的时间以前都是可用的,浏览器可以留着下次备用。

Cache-Control Header
Cache-Control是在HTTP/1.1中被引入以弥补Expries header的不足。因为Expries header使用的是一个具体的日期,它就要求服务器与客户端之间要有严格的时钟检查,并且当过期日期到来之后,服务器端还必须配置一个新日期。
相反,Cache-Control 使用max-age来指定一个时间段来标识一个组件能使用多长时间。这个max-age是以秒为单位来描述的。如果在这个时期内,这个组件再被请求,浏览器就直接使用缓存里的就行了。

Apache的 mod_expires模块,可以像设置max-age那样来配置Expires header,它使用ExpiresDefault来设置一个时间段。

开启 mod_expires

---------------------------------------

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType p_w_picpath/gif A2592000
ExpiresByType text/html M604800
ExpiresByType text/javascript "access plus 1 week"
ExpiresByType text/css "access plus 1 week"
ExpiresByType application/x-shockwave-flash A3600
</IfModule>

-----------------------------------------

ExpiresActive on|off   开启/关闭 Expires 头标的生成。
ExpiresByType          指定MIME类型文档的过期时间。

--------------------------------------------------------------

过期时间的写法共有五种:access、now、A、modification及M。 示例如下:
A2592000
M604800
"access plus 1 month"
"access plus 4 weeks"
"now plus 30 days"
"modification plus 5 hours 3 minutes"

access、now及A 三种写法的意义相同,指过期时间从访问时开始计算。
modification及M 的意义相同,指过期时间是以被访问文件的最后修改时间开始计算。此写法只对静态文件起作用,而由脚本生成的动态页面不受它的作用。

例子:

所有文本文件在客户端缓存一小时后过期
ExpiresByType text/plain A3600
所有GIF文件从最后修改时间算起一个星期后过期
ExpiresByType p_w_picpath/gif M604800
在客户访问该文件时后7天过期
ExpiresByType text/html "access puls 7 days"
ExpiresByType p_w_picpath/gif "modification plus 1 years 1 months 1 weeks 1 days 1 hours 1 minutes 1 seconds";

--------------------------------------------------------------

ExpiresDefault 缺省的过期时间。

===============================================================

    使用Expires  header只会影响已经访问过的页面和组件,当用户第一次访问您的页面时无法避免的会有比较多的HTTP请求数,因为这时浏览器的缓存里是空的。所以如果您的网站能吸引用户访问更多的页面, 并经常在此停留,我们所做的缓存工作才有效果。

    一般Expires header常用于图片,其实这并不是最佳实践。Expires header应该应用于所有那些不经常变动的组件,script,样式表或Flash组件。

 =================================================================

实例:

-----------------------------------------

<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 12 hours"
  ExpiresByType text/html "access plus 3 days"
  ExpiresByType text/plain "access plus 3 days"
  ExpiresByType p_w_picpath/gif "access plus 30 days"
  ExpiresByType p_w_picpath/png "access plus 30 days"
  ExpiresByType p_w_picpath/jpeg "access plus 30 days"
  ExpiresByType p_w_picpath/x-icon "access plus 30 days"
</IfModule>

------------------------------------------

<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault A600
ExpiresByType p_w_picpath/x-icon A2592000
ExpiresByType application/x-javascript A604800
ExpiresByType text/css A604800
ExpiresByType p_w_picpath/gif A2592000
ExpiresByType p_w_picpath/png A2592000
ExpiresByType p_w_picpath/jpeg A2592000
ExpiresByType text/plain A86400
ExpiresByType application/x-shockwave-flash A2592000
ExpiresByType video/x-flv A2592000
ExpiresByType application/pdf A2592000
ExpiresByType text/html A600
</IfModule>