IIS 8.0同时添加Expires头和Cache-Control缓存控制

3
我可以看到stackoverflow在它们的图片、css、js等中都添加了ExpiresCache-Control,因此我也想这样做。我尝试过this这篇文章。

web.config

<location path="Content">
    <system.webServer>
      <staticContent>

    <clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" 
    cacheControlMaxAge="365.00:00:00" />

    <clientCache cacheControlMode="UseExpires" httpExpires="Mon, 01 May 2023 00:00:00 GMT" />

      </staticContent>
    </system.webServer>
</location>

当我尝试访问内容文件夹中的CSS文件:http://localhost:11111/Content/bootstrap.min.css

我会收到以下错误:

错误

HTTP Error 500.19 -

Internal Server Error The requested page cannot be accessed because the related configuration data for the page is invalid.

Module           CustomErrorModule
Notification     SendResponse
Handler          StaticFile
Error Code       0x8007000d

Config Error Configuration element 'clientCache' already defined

我知道clientCache已经被定义,但我很担心并想知道如何在响应头中设置Cache-Control和Expires?任何帮助都将是巨大的帮助。
更新: 正如@Vitaly Kulikov在评论中回答和讨论,并使用thisthis文章,我得出结论,在IIS中我们不能在web.config中同时设置Expires和Cache-Control,所以我计划使用OutputCache至少为图像设置过期时间,并且它可以在0.9毫秒延迟后工作。希望对某人有所帮助。
1个回答

4
根据规范,您无法同时拥有它们两个。但是您没有理由这样做,任何一个都可以胜任。 规范 如果您查看Chrome源代码code,浏览器中的缓存有几个简单的规则:
第一:

max-age指令优先于Expires,因此如果在响应中存在max-age,则计算方法为:freshness_lifetime = max_age_value

第二:

否则,如果响应中存在Expires,则计算方法为:freshness_lifetime = expires_value - date_value

第三:

如果我们错过了前面的步骤并且“cache-control”!=“must-revalidate”,则浏览器还有一个缓存规则:它将资源缓存10%,自上次修改资源以来经过的时间。

就这些,没有更多的规则了。

感谢您的回答,所有著名的网站都设置了它们,我可以看到Stack Overflow为它们的图像和CSS等设置了“Expires”和“max-age”,例如:Cache-Control:public, max-age=60 Expires:Sun, 13 Mar 2016 08:05:18 GMT。他们是如何做到的?他们是使用web.config还是在CDN中配置的? - Shaiju T
大多数“著名站点”不使用IIS。但是Tomcat、Apache Web服务器或Nginx可以配置为同时返回两个标题。 - Vitaly Kulikov
1
我已经编辑了我的答案,以阐明浏览器缓存的工作方式。 - Vitaly Kulikov
你的意思是IIS不提供那个选项,好的,如果我设置cacheControlMode="UseMaxAge",响应中会缺少过期头,而且Google速度测试说要为图像、CSS、JS添加过期时间。有什么办法? - Shaiju T
页面速度测试是由人编写的,它的逻辑也存在漏洞。你更相信谁,Chrome源代码还是某个网页? - Vitaly Kulikov
我按照像你这样的开发人员建议,使用Google Speed或Yslow测试网站,我遇到了与此人相同的问题。无论如何,我现在打算暂时放弃js和css的过期问题,我计划至少使用OutputCache为图像设置Expires,并且它起作用了,感谢答案。我可以在asp mvc中使用Nginx和IIS吗?如果可以的话,有什么参考资料? - Shaiju T

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