在 http 报文头中,与缓存时间有关的两个字段是 Expires 以及 Cache-Control 中的 max-age,Expires 设定了一个缓存的过期时间,而 max-age 则设定了一个缓存有效时间(单位秒),通常情况下,两者可以相互推得。(详细参考 浏览器缓存机制浅析)
还是用 WampServer 举例。我们在 www 文件夹下新建个 index.html 页面,在浏览器中打开它,得到的 http 响应头如下:
很显然,我们并没有看到 Expires 或者 max-age 字样。
比如我要把 max-age 设置成 1000,how?
打开 httpd.conf 文件(比如我的是在 F:\wamp\bin\apache\Apache2.2.17\conf 下),找到这一行:
去掉注释(井号),然后再加上这么两行,再重启下apache,就 ok 了:
我们看到 max-age 字段也出现在了响应头中,其实它是根据 Expires 的设置自动填充的。
其他设置类似:
我们也可以直接修改 max-age 字段。
同样在 httpd.conf 文件中,找到这么一行:
去掉注释(井号),再加上这么一句,重启下 apache,就 ok 了:
我们发现得到的响应头里并没有 Expires 字段。
为了减少客户端对服务端资源的请求 可以开启mod_expires so模块
在apache%C %E %D %C /" target="_blank">apache配置文件中去掉这段
“#LoadModule expires_module modules/mod_expires so
”前面的#号
Httpd conf配置
代码如下
ExpiresActive on
#缓存 天
ExpiresBytype text/css "access plus days
ExpiresByType application/x javascript "access plus days "
ExpiresByType image/jpeg "access plus days "
Expire *** ytype image/gif "access plus days "
加入下面内容
代码如下 <IfModule mod_expires c># mod_expires ExpiresActive on ExpiresDefault A ExpiresBytype text/css “access plus days ExpiresByType text/javascript “access plus days ” ExpiresByType application/x javascript “access plus days ” ExpiresByType application/x shockwave flash “access plus days ” ExpiresByType image/* “access plus days ” ExpiresByType text/ “access plus days ” <FilesMatch “ (flv|ico|pdf|avi|mov|ppt|doc|mp |wmv|wav|jpg|gif)$”>ExpiresDefault A </FilesMatch></IfModule>lishixinzhi/Article/program/PHP/201311/20858expires属性指定了coolie的生存期,默认情况下coolie是暂时存在的,他们存储的值只在浏览器会话期间存在,当用户推出浏览器后这些值也会丢失,如果想让cookie存在一段时间,就要为expires属性设置为未来的一个过期日期。现在已经被max-age属性所取代,max-age用秒来设置cookie的生存期。
Squid和Apache中的max-age与Expires的分别
max-age是HTTP/1.1中,他是指我们的web中的文件被用户访问(请求)后的存活时间,是个相对的值,相对Request_time(请求时间).
例如:A.html 用户请求时间是18:00,max-age设置的是600的话,相当18:00+600秒过期,也就是相对18:00的时间后面600秒后过期.默认的max-age是由Expires算出来的。
Expires是HTTP/1.0中的,它比max-age要麻烦点.Expires指定的时间分下面二种,这个主要考虑到apache中设置是A还是M。
1、相对文件的最后访问时间(Atime)
当Apache使用A时间来做Expires时.这样设置时.他就和max-age的值相等,因为max-age是相对文件的请求时间(Atime).
例如:ExpiresByType text/html A600
由上面我们得知,Apache设置Atime时,过期为600秒时.
Expires=18:00+600=18:10
max-age=18:00+600=18:10
得出:Expires=max-age
2、绝对修改时间(MTime)
这又分二种情况,我们来拿A.htm来讲
假设文件的建立时间为18:00。
当用户Request请求为18:00时,过期为600秒
Expires=18:00+600=18:10
max-age=18:00+600=18:10
得出:Expires等于max-age
当用户Request请求为18:20时,过期为600秒
Expires=18:00+600=18:10(因为设置成Mtime时,时间由文件建立时间来决定)
max-age=18:20+600=18:30
得出:Expires不等于max-age
另外要注意,象上面这种清况时,max-age优化,所以过期时间为18:30。
在squid,如果没有指明expires和max-age这二个的截止时间,那它就会使用发式截止时间,如参考 Last-Modified。
其实上面的max-age=18:20+600=18:30,这样算max-age不对,真实环境要这样算,max-age过期为http头中的Age=600过期。
注:Age域值是缓存服务器估计从响应产生或被原始服务器重新证实以来的总时间.age的值是缓存服务器算出来的,原始服务器是没有的。
apache 设置expires和max-age缓存
对于同一个 *** 作对象,ExpiresByType比ExpiresDefault优先级高.当expires和max-age同时存在时,max-age的优先级会高于expires.
当你不知道某个文件的MIME类型时,你可以通过浏览器去看httpwatch去看MIME类型.
如果要对某个目录里的某个文件设置Expires头,可以用<filesmatch "正则"></filematch>来匹配.
设置缓存也可以通过mod_headers模块修改cache-control来实现.
header set cache-control "max-age="3600".
mod_expires 实例:
<Directory /opt>
ExpiresActive On
ExpiresDefault "accesss plus 3600 seconds" 如果是1秒,后面也是seconds
ExpiresByType application/octet-stream "accesss plus 1 months" 这是对特殊文件类型bin缓存1个月
<FilesMatch ^data.swf$>针对opt目录下data.swf设置Expire值
ExpiresActive On
ExpiresDefault "accesss plus 60 seconds"
</FilesMatch>
</Directory>
mod_headers实例
<Directory /opt>
header set cache-control "max-age=3600"
<FilesMatch ^data.swf$>
header set cache-control "max-age=60"
</FilesMatch>
</Directory>
在深入的待研究,目前对缓存的一些概念还不是太深入,如果有更深入更具体的方法在海南SEO和大家分享。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)