在ASP.NET中使用Web.config设置HTTP过期标头

27

我试图通过设置web.config文件来使YSlow在“添加过期标头”部分给我评级A。

我一直在寻找,根据现有的内容,这就是我放置的内容:

<staticContent>
    <clientCache httpExpires="15.00:00:00" cacheControlMode="UseExpires"/>
    </staticContent>
</system.webServer>

这是我在Firebug中看到的:

Response Headers

HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Sun, 28 Aug 2011 13:54:50 GMT
X-AspNet-Version: 4.0.30319
Cache-Control: private
Content-Type: image/jpeg
Content-Length: 24255
Connection: Close


Request Headersview source
Host    localhost:50715
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0
Accept  image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip, deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection  keep-alive
Referer http://localhost:50715/MySite/SiteHome.html
Pragma  no-cache
Cache-Control   no-cache

然而,当我在Firefox中查看时,即使使用Ctrl + F5重新加载页面,Yslow仍然会给出F评分。

我错过了什么吗?

谢谢。


你是否在使用Visual Studio中的内置Web服务器(从你的标头看起来是这样)?你是否尝试在IIS7或IIS Express中运行它? - patmortech
是的,我正在使用内置的VS服务器,还没有在IIS中尝试过。您认为这可能是问题的根源吗? - frenchie
是的,我不相信内置服务器会使用你上面提到的那些设置。 - patmortech
3个回答

35

来自.NET Daily,我已经成功地将此应用于运行在IIS上的PHP网站。它将最大年龄设置为从现在起的30天,而不是必须指定一个具体的日期。

将以下内容添加到您的web.config文件中:

<system.webServer>
  <staticContent>
    <clientCache cacheControlMaxAge="30.00:00:00" cacheControlMode="UseMaxAge"/>
  </staticContent>
</system.webServer>

这个配置同时满足了PageSpeed的"利用浏览器缓存"和YSlow的"添加过期标头"要求。 YSlow需要大于7天的值。 PageSpeed需要在30天到1年之间。


嗨。我想问一下。如果我将脚本放在我的Web配置中,需要多长时间才能获得A级?而且这个脚本现在还有效吗? - moses toh

19

客户端缓存文档中得知:

httpExpires属性的值必须是符合RFC 1123规范的完整日期和时间,例如: Fri, 01 Jan 2010 12:00:00 GMT。

因此,如果要为静态内容使用http过期头,请按以下方式设置:

<staticContent>
  <clientCache cacheControlMode="UseExpires" httpExpires="Sun, 1 Jan 2017 00:00:00 UTC" />
</staticContent>

更新(针对上面的评论):这在内置的VS服务器中很可能仍然不起作用。我不确定它是否支持过期标头。据我所知,这是一个IIS设置。


2

1
是的,这就是我想要做的事情,应该表述得更清楚。我确实正在尝试为静态内容(图片、CSS和JS文件)进行缓存,而不是整个aspx页面。 - frenchie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接