什么是expire头以及如何在ASP.NET和PHP中实现它们?

时间:2009-07-21 06:49:09

标签: php asp.net performance http-headers yslow

今天我使用YSlow检查了我网站的效果统计信息。我收到了警告(或可能是错误),如下所示

Add Expires headers
There are 15 static components without a far-future expiration date.

    * (no expires) http://www.example.com/video/css/global.css
    * (no expires) http://www.example.com/video/js/global.js
    * (no expires) http://www.example.com/video/images/main-bg.png

这意味着什么以及如何在PHP和ASP.NET中实现这一点。我在共享托管服务器上,所以请告诉我一些使用代码执行此操作的方法,因为我无法在服务器端进行任何修改。

如果我的标题过期,那么如果我在CSS中进行更改,那么用户将无法立即获取它们,因为css和其他文件被缓存一段时间限制(1个月,一周) )。是吗?

使用过期标题是否有任何缺点?

2 个答案:

答案 0 :(得分:5)

PHP

$time = time() + 3 * 24 * 60 * 60; // 3 days
header('expires: ' . gmdate('D, d M Y H:i:s \G\M\T', $time);

但我建议您使用Apache模块mod_expires [1]。然后你可以把这样的东西放在.htaccess文件中

<FilesMatch "\.(jpg|gif|png|css|js)$">
    ExpiresActive on
    ExpiresDefault "access plus 3 days"
</FilesMatch>

这将匹配所有图片,CSS和JavaScript文件,并设置Expires标头3天

[1] http://httpd.apache.org/docs/2.0/mod/mod_expires.html

答案 1 :(得分:2)

显然,expire标头的缺点就是您已经说过的,如果您进行了更改,那么用户将在到期之前不会收到新版本。

另一个选项是发送一个修改日期的标题,这样下次用户访问浏览器时会询问文件是否从那时起发生了变化...如果不是,它只会加载缓存版本。不确定哪些浏览器实际上遵循此标准。

这些选项仍然只适用于动态页面,要使用样式表或图像等静态内容,您需要更多访问服务器。 (您也可以使用.htaccess文件实现其中一些结果)

在这里,我用谷歌搜索了你的进一步阅读。

PHP资源: http://www.sitepoint.com/article/caching-php-performance/

ASP.NET资源: http://ondotnet.com/pub/a/dotnet/2002/12/30/cachingaspnet.html

.htaccess资源: http://www.askapache.com/htaccess/speed-up-sites-with-htaccess-caching.html