Etag和Expire
作者: 曲文庆 日期: 2009-08-07 10:48
Etag
在HTTP1.1中有介绍,主要的作用就是在(css file, image, javascript file)文件后面添加一个唯一的参数(相当于查询参数字符串),Etag有服务器端生成,并且随着文件的改变而改变,这样浏览器端就会只重新请求获取Etag发生变化的文件,减少浏览器端数据的流量,加快浏览器的反应速度,重要的是减轻服务器端的压力,所以服务器端Etag的实现就比较重要了。
下面分别说下在Apache和Lighttpd中怎样配置Etag
Apache Etag
在Apache中设置Etag的支持比较简单,只用在含有静态文件的目录中建立一个文件.htaccess, 里面加入:
FileETag MTime Size
这样就行了,详细的可以参考Apache的文档页:Documentation
Lighttpd Etag
在Lighttpd中设置Etag支持:
etag.use-inode: 是否使用inode作为Etag
etag.use-mtime: 是否使用文件修改时间作为Etag
etag.use-size: 是否使用文件大小作为Etag
static-file.etags: 是否启用Etag的功能
第四个参数肯定是要enable的, 前面三个就看实际的需要来选吧,推荐使用修改时间
Expires
过期时间是HTTP响应(response)的头部控制信息,浏览器会在指定过期时间内使用本地缓存,不用重新加载,对应的缓存对象主要是静态文件,如css,image, javascript; 可以在服务器端进行全局设置,也可以应用端进行设置,这里我会说下服务器端的设置
Apache
首先要确定Apache是否支持了mod_expired模块
然后在Apache的配置文件中加入:
ExpiresActive on ExpiresDefault "access plus 1 year"
可以看出,配置时可以指定设置Expire对象的文件类型,以及过期时间,这里是一年后
Lighttpd
Lighttpd设置expire也要先查看是否支持了mod_expire模块,查看vlighttpd.conf文件中 是否开启了该模块
然后就可以设置了:
下面的设置是让URI中所有images目录下的文件1小时后过期;
expire.url = ( "/images/" => "access 1 hours" )
下面是让作用于images目录及其子目录的文件;
$HTTP["url"] =~ "^/images/" { expire.url = ( "" => "access 1 hours" ) }也可以指定文件的类型;
$HTTP["url"] =~ "\.(jpg|gif|png|css|js)$" { expire.url = ( "" => "access 1 hours" ) }
其他
设置较长的过期时间后如果想要客户端重新下载文件怎么办呢,比如当你修改了javascript或者
是css文件后,这时可以改变文件的文件名,最合适的做法是给文件加上一个版本号,
比如main_1.0.1.js, 这也是yahoo的做法。
当服务器的环境是cluster时,Etag的使用可能就要考虑的更多了,因为每个服务器生成的Etag
不一样,所以最终的浏览器每次都检测到文件的Etag不一样而去重新请求,这里就不多说了, 注意到这个问题就行了
lighttpd 1.4.26 SSL bug (2010-05-04 21:28)
Lighttpd中404返回错误的状态码200的解决办法 (2009-11-12 20:12)
ubuntu 9.04 安装lighttpd 出错及解决方案 (2009-08-12 10:54)
Nagios 3.1 环境搭建 (2009-05-13 14:16)
Lighttpd for Windows (2009-05-10 09:11)
搭建Lighttpd的SSL模块(原创) (2008-11-05 16:32)