【问题标题】:What is expire header and how to achive them in ASP.NET and PHP?什么是过期标头以及如何在 ASP.NET 和 PHP 中实现它们?
【发布时间】:2009-07-21 06:49:08
【问题描述】:

今天我使用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 个月,一周)。是吗?

使用过期标头有什么缺点吗??

【问题讨论】:

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


    【解决方案1】:

    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

    【讨论】:

    • 如果您担心您的 css 被缓存太久,您可以在源 html 页面中添加一些文本到样式表或 javascrip 链接,例如 .发布新的 css 文件时只需更改该文本
    • 我知道许多 Web 代理配置会终止查询标记方案,因为代理配置设置为从不缓存任何带有查询的 URL,这是由于 Web 应用程序在应该使用查询 GET 时使用查询 GET 的不良做法发布。
    【解决方案2】:

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

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

    这些选项仍然只适用于动态页面,要对静态内容(如样式表或图像)执行此操作,您将需要更多访问服务器的权限。 (您也可以使用 .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

    【讨论】:

    • 所有名副其实的浏览器都遵循 If-Modified-Since 方案。但是,这仍然需要到 Web 服务器进行昂贵的往返。 Expires 标签的速度要快数百毫秒。乘以许多项目,它会变得更快。
    猜你喜欢
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 2014-11-22
    • 2014-07-27
    • 2011-07-04
    • 2017-10-01
    相关资源
    最近更新 更多