关于客户端缓存
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 image/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 image/gif M604800
在客户访问该文件时后7天过期
ExpiresByType text/html "access puls 7 days"
ExpiresByType image/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 image/gif "access plus 30 days"
ExpiresByType image/png "access plus 30 days"
ExpiresByType image/jpeg "access plus 30 days"
ExpiresByType image/x-icon "access plus 30 days"
</IfModule>
------------------------------------------
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault A600
ExpiresByType image/x-icon A2592000
ExpiresByType application/x-javascript A604800
ExpiresByType text/css A604800
ExpiresByType image/gif A2592000
ExpiresByType image/png A2592000
ExpiresByType image/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>