Etag和Expire

来源:互联网 发布:北京网络基站ip地址 编辑:程序博客网 时间:2024/06/01 08:32

Etag和Expire

Etag

在HTTP1.1中有介绍,主要的作用就是在(css file, image, javascriptfile)文件后面添加一个唯一的参数(相当于查询参数字符串),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不一样而去重新请求,这里就不多说了,
原创粉丝点击