ExpiresActive On .htaccess解释

时间:2010-10-08 11:25:27

标签: apache .htaccess

[i]ExpiresActive On
ExpiresByType image/gif A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType image/png A2592000
BrowserMatch "MSIE" brokenvary=1
BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
BrowserMatch "Opera" !brokenvary
SetEnvIf brokenvary 1 force-no-vary[/i]

最近在样本.htaccess中看到了这段代码。

推测ExpiresByType设置图像的到期时间 - 是否与访问者浏览器缓存有关?什么 A2592000 转换为?

什么是“brokenvary = 1”意味着什么?我收集它正在寻找UserAgent,但接着是什么?

谢谢!

2 个答案:

答案 0 :(得分:10)

  

推测ExpiresByType设置图像的到期时间 - 是否与访问者浏览器缓存有关?

是。 mod_expires允许根据类型轻松设置过期规则。

但是到期时间仅指定某个响应的新鲜时间。这并不一定意味着response is cacheable。但是in general, any successful response is cacheable unless there are restrictions

  

除非受到缓存控制(section 14.9)指令的特别约束,否则缓存系统可能总是存储一个成功的响应(请参阅13.8部分)作为缓存条目,如果没有验证,可以返回它它是新鲜的,并且可以在成功验证后返回它。

因此,除非您指定根本不存储响应(即使用no-store),否则响应可以由公共缓存(共享缓存)和私有缓存(本地缓存)存储。


  

A2592000转化为什么?

响应的新鲜度时间可以使用绝对时间值(例如“2010-10-09”)或相对时间值(例如“明天”)来表示。日期格式A2592000使用后一个时间值,因为A表示访问时间2592000是添加的秒数。因此,A2592000表示“访问时起的2592000秒”。


  

“brokenvary = 1”意味着什么?我收集它正在寻找UserAgent,但接着是什么?

Apache有一些special purpose environment variables,其中force-no-vary就是其中之一:

  

这会导致在将响应标头发送回客户端之前从响应标头中删除任何Vary个字段。有些客户没有正确解释这个字段;设置此变量可以解决此问题。设置此变量还意味着 force-response-1.0

现在Vary header field用于指定list of header field names the server used to select the response among multiple representations

  

服务器应该使用Vary头字段来通知缓存哪些请求头字段用于在服务器驱动的协商的可缓存响应的多个表示中进行选择。

因此,如果您正在使用内容协商并且请求了/document.html之类的请求通用URL,并且该资源有多种表示形式(例如英语和德语),并且您的服务器选择德语变体 Accept-Language 声明值de,服务器将包含一个包含Accept-Language Vary 字段,让缓存知道选择是基于值{ 接受语言

但是有些用户代理没有做到这一点。在这种情况下,不应发送 Vary 标头字段,可以通过设置特殊用途环境变量force-no-vary来完成。

答案 1 :(得分:2)

ExpiresByType是mod_expires模块的Apache指令,它生成“Expires”和“Cache-control”http响应头。这些标头告诉浏览器允许在特定时间内缓存资源。

从文件记录(http://httpd.apache.org/docs/2.0/mod/mod_expires.html):

'A' means the client's access time should be used.

来自同一页面的示例可能会解释:

# enable expirations
ExpiresActive On
# expire GIF images after a month in the client's cache
ExpiresByType image/gif A2592000
# HTML documents are good for a week from the
# time they were changed
ExpiresByType text/html M604800