mod_expires
最快(最便宜)的数据传输是不必执行的操作-因为数据已经存在。 还是在那里-文件缓存已广为人知并得到实践。 每个Web浏览器都在缓存他以前从Web服务器请求的文件。 但是,如果要第二次加载文件,仍然会向Web服务器发送一个请求,然后通常以“ 304未修改” [1]进行答复,如他的访问日志所示:
215.82.12.78 - - [02/Nov/2007:10:20:33 +0100] "GET /images/logo.gif HTTP/1.1" 304 -
收到此消息后,最终浏览器将从其缓存中加载文件。
而不是传输文件,只有几个字节通过电缆。
但是,如果页面使用大量的缓存文件(例如gif图像和javascript文件),那么即使是304个请求也要汇总-特别是在具有高延迟的连接上。
为了消除这种不必要的负担,Apache Web服务器提供了mod_expires [2]模块,该模块使您可以在每个传递的文件上加上“有效至”标记。 因此,根据HTTP / 1.1规范([3],第14.21小节),将以下行添加到http响应标头中:
Expires: Thu, 01 Mar 2007 09:30:00 GMT
这将导致浏览器不再询问该文档或文件,除非他从缓存中删除了该文档或文件。
现在,让我们仔细看看mod_expires的指令及其产生的可能性。
这是一个例子:
ExpiresActive On
ExpiresDefault "access plus 5 minutes"
ExpiresByType image/gif "access plus 2 days"
ExpiresByType text/html "modification plus 5 minutes"
ExpiresActive用于启用或禁用(打开/关闭)http响应标头的修改。
ExpiresDefault给出所有文档的默认值,这些文档不能单独由规则捕获。
此处的有效期限为自访问时间起五分钟。
这样可以确保客户端不会每隔几秒钟重新加载文档,而另一方面,如果在服务器上进行了文档更改,则他将在合理的时间内获得较新的版本。
ExpiresByType使您可以根据mime类型控制到期时间。 在示例中,从下载之日起24小时内,不会从服务器重新加载gif图像-基于gif图像没有变化,而是会被具有新名称的新文件替换的假设。 如果您的网站使用带有翻转效果的gif按钮,则可以减少许多请求。 另一方面:如果在图像名称保持不变的情况下更改了网页的布局和gif图像,则将导致浏览器的外观看上去很奇怪,而这些浏览器会在不到24小时之前首次访问该页面。 因此,尽管该指令可以大大减少通信量,但也应谨慎处理。
在示例中,如果HTML页面的内容少于5分钟,则不会重新加载它们。 想象一下,一个Web门户的频繁访问首页,它是每五分钟从动态内容生成一次,但出于性能原因而另存为静态html文件。 如果由“访问”替代方法来管理,则仅加载4:59分钟旧页面的客户端将在五分钟内错过新版本。 基于“修改”,可以确保没有人会错过最新消息。
简而言之,将访问规则用于不变的内容(或至少不经常更改)。 如果需要修改,请尝试使用新名称。 将修改规则用于经常被修改的内容,或者由于什么原因而寿命很短。
最后但并非最不重要的一点是,这种方法不仅可以减轻Apache的负担,而且可以加快客户端的Web应用程序的速度:可能会显示每次使用时都不需要询问的图像和JavaScript。仅几秒钟的时间就更快了。 但是最后(至少主观上)全部总结了出来。
----
[1]
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html[2]
http://httpd.apache.org/docs/2.2/mod/mod_expires.html[3]
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html翻译自: https://bytes.com/topic/apache/insights/740981-advanced-caching-mod_expires
mod_expires