【问题标题】:No expires header没有过期标头
【发布时间】:2011-10-02 10:17:29
【问题描述】:

我有来自 YSlow 的报告:

(no expires) http://static3.scirra.net/avatars/128/40cfdcbd1b1ec1842e199c97c4b85a4a.png

(还有很多相似之处)。不过,在我的 web.config 中,我有:

    <system.webServer>
            <staticContent>
                <clientCache httpExpires="Sun, 29 Mar 2020 00:00:00 GMT" cacheControlMode="UseExpires" />
            </staticContent>
            <caching>
                <profiles>
                    <add extension=".ashx" policy="CacheForTimePeriod"  kernelCachePolicy="DontCache" duration="01:00:00" />
                    <add extension=".png" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" location="Any" />
                </profiles>
            </caching>
        <rewrite>
            <rules>
                <rule name="Avatar">
                    <match url="avatars/([0-9]+)/(.*).png" />
                    <action type="Rewrite" url="gravatar.ashx?hash={R:2}&amp;size={R:1}" appendQueryString="false" />
                </rule>
            </rules>
        </rewrite>

这不应该是正确添加过期标头吗?我的目标是:

  • Gravatar.ashx 从 Gravatar 服务器获取图像
  • 服务器缓存结果 1 小时(类似 SO)
  • 已添加过期标头,因此客户端不会一直从我的服务器获取它

【问题讨论】:

    标签: c# asp.net caching yslow


    【解决方案1】:

    在 IIS 中,您可以定义 HTTP 标头。

    在 IIS 中单击您的图像文件夹。然后单击 HTTP 响应标头。然后设置通用标题...

    您可以在此处查看过期 Web 内容以及您选择的时间。您也可以对 JS 和 CSS 执行此操作。请注意您也应用了哪些文件。此外,如果您设置的过期时间很长并且您打算更改这些文件,则可能会导致您的网站出现问题。

    如果您的 JS 文件有 1 个月的有效期,然后您在使用相同名称的同时更改它,那么当用户访问您的网站时,他们将看到内容尚未过期,并且不会从 Web 服务器请求更改后的文件。您可以通过设置适当的过期时间来解决这个问题,同时您认为内容可能会发生变化,或者您可以将版本号应用于您的 javascript 和 CSS 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 2012-12-08
      • 1970-01-01
      • 2011-01-04
      • 2011-08-18
      • 1970-01-01
      相关资源
      最近更新 更多