Etag和Expire

Etag和Expire

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不一样而去重新请求,这里就不多说了,
### Expire 概念及其在 IT 领域中的用法 #### 定义与概述 Expire 是指某个对象或实体的有效期结束的时间点,在此之后该对象不再有效或者可以被删除。这一概念广泛应用于缓存机制、会话管理以及分布式系统等多个方面。 #### 缓存中的 expire 属性 在缓存技术里,设置过期时间是一个常见的做法。例如 Redis 数据库允许为键值对指定生存时间(TTL, Time To Live),一旦超过这个时间段如果没有对该 key 进行任何操作,则认为这条记录已经失效并自动清除[^4]。 ```python import redis r = redis.Redis() r.set('foo', 'bar', ex=60) # 设置key "foo" 的value为"bar", 并且设置了有效期为60秒 print(r.get('foo')) # 输出 b'bar' ``` #### HTTP 协议里的 Cache-Control Expires 头部字段 在网络通信中,特别是HTTP请求响应过程中也涉及到expire属性的应用。服务器可以通过返回特定头部信息告知浏览器或其他代理如何处理资源缓存: - `Cache-Control` 提供了一种更灵活的方式定义缓存策略; - `Expires` 则直接给出了具体的日期表示何时之前可以从本地缓存获取内容而不必再次向源站发起查询请求。 ```bash GET /example.html HTTP/1.1 Host: www.example.com HTTP/1.1 200 OK Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT Content-Length: 88 Content-Type: text/html Connection: Closed Cache-Control:max-age=3600 Expires:Mon, 27 Jul 2009 13:28:53 GMT ``` #### NoSQL 中的 TTL (Time-To-Live) 对于一些NoSQL存储解决方案而言,同样提供了类似的特性用于控制文档级别的生命周期。比如 MongoDB 支持创建带有 TTL 索引集合,从而使得其中的数据能够在一定条件满足后自动消失;Cassandra 更进一步实现了基于列族表结构下的每条记录都可以拥有独立的存活周期设定功能[^2]。 #### Elasticsearch 文档级别 TTL 实现 尽管官方建议尽量减少依赖于内置的 delete by query API 来清理陈旧索引,但在某些版本早期确实存在针对 document level 的 _ttl mapping type ,不过自 ES 5.x 版本起已被移除转而推荐利用 ILM(Index Lifecycle Management) 或者 Rollup Jobs 达成相似目的[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值