让 IIS 7.5 在不同的页面上缓存静态内容文件

让 IIS 7.5 在不同的页面上缓存静态内容文件

在 Windows 2008 R2 上,我使用 DNS 和 IIS 建立了开发测试服务器;也就是说,我将拥有一个可以浏览的 Web 应用程序http://测试.dev

我已将所有静态内容文件(如图像、js 文件和 css 文件)移至另一个可见的应用程序中http://cdn.test.dev

test.dev,使用 cdn.test.dev 网址,例如http://cdn.test.dev/js/jquery.js加载 js、css 和图像。

当我第一次加载 test.dev 的“~/”时,所有文件都会以响应代码 200 加载;当我在 Firefox 中按 F5 时,除“~/default.aspx”之外的所有文件都会以 304 响应代码加载;但按 Ctrl+F5 会再次以 200 代码加载它们;如果我在 test.dev 中浏览另一个 URL(如“~/pages/”),所有这些静态文件都会以 200 代码重新加载...这是正常的吗,还是我正在做什么错误的

实际上,我正在寻找这样的行为:
我希望客户端加载http://cdn.test.dev/js/jquery.js,仅一次。我希望客户端的浏览器在 test.dev 的所有其他页面中从缓存中使用此 jquery.js 文件

这可能吗

这是我在 cdn.test.dev 根目录中的 web.config 文件:

<configuration>
    <system.webServer>
        <caching>
            <profiles>
                <add extension=".png" policy="CacheUntilChange" varyByHeaders="User-Agent" location="Client" />
                <add extension=".gif" policy="CacheUntilChange" varyByHeaders="User-Agent" location="Client" />
                <add extension=".jpg" policy="CacheUntilChange" varyByHeaders="User-Agent" location="Client" />
                <add extension=".js" policy="CacheUntilChange" varyByHeaders="User-Agent" location="Client" />
                <add extension=".css" policy="CacheUntilChange" varyByHeaders="User-Agent" location="Client" />
                <add extension=".axd" kernelCachePolicy="CacheUntilChange" varyByHeaders="User-Agent" location="Client" />
            </profiles>
        </caching>
        <httpProtocol allowKeepAlive="true">
            <customHeaders>
                <add name="Cache-Control" value="public, max-age=31536000" />
            </customHeaders>
        </httpProtocol>
        <validation validateIntegratedModeConfiguration="false" />
        <modules runAllManagedModulesForAllRequests="true">
            <remove name="RadUploadModule" />
            <remove name="RadCompression" />
            <add name="RadUploadModule" type="Telerik.Web.UI.RadUploadHttpModule" preCondition="integratedMode" />
            <add name="RadCompression" type="Telerik.Web.UI.RadCompression" preCondition="integratedMode" />
        </modules>
        <handlers>
            <remove name="ChartImage_axd" />
            <remove name="Telerik_Web_UI_SpellCheckHandler_axd" />
            <remove name="Telerik_Web_UI_DialogHandler_aspx" />
            <remove name="Telerik_RadUploadProgressHandler_ashx" />
            <remove name="Telerik_Web_UI_WebResource_axd" />
            <add name="ChartImage_axd" path="ChartImage.axd" type="Telerik.Web.UI.ChartHttpHandler" verb="*" preCondition="integratedMode" />
            <add name="Telerik_Web_UI_SpellCheckHandler_axd" path="Telerik.Web.UI.SpellCheckHandler.axd" type="Telerik.Web.UI.SpellCheckHandler" verb="*" preCondition="integratedMode" />
            <add name="Telerik_Web_UI_DialogHandler_aspx" path="Telerik.Web.UI.DialogHandler.aspx" type="Telerik.Web.UI.DialogHandler" verb="*" preCondition="integratedMode" />
            <add name="Telerik_RadUploadProgressHandler_ashx" path="Telerik.RadUploadProgressHandler.ashx" type="Telerik.Web.UI.RadUploadProgressHandler" verb="*" preCondition="integratedMode" />
            <add name="Telerik_Web_UI_WebResource_axd" path="Telerik.Web.UI.WebResource.axd" type="Telerik.Web.UI.WebResource" verb="*" preCondition="integratedMode" />
        </handlers>
        <security>
            <requestFiltering>
                <requestLimits maxAllowedContentLength="10485760" />
            </requestFiltering>
        </security>
        <staticContent>
           <clientCache cacheControlMode="UseExpires" httpExpires="Wed, 01 Jan 2020 00:00:00 GMT"/>
        </staticContent>
    </system.webServer>
    <appSettings />
    <system.web>
        <compilation debug="false" targetFramework="4.0" />
        <pages>
            <controls>
                <add tagPrefix="telerik" namespace="Telerik.Web.UI" assembly="Telerik.Web.UI" />
            </controls>
        </pages>
        <httpHandlers>
            <add path="ChartImage.axd" type="Telerik.Web.UI.ChartHttpHandler" verb="*" validate="false" />
            <add path="Telerik.Web.UI.SpellCheckHandler.axd" type="Telerik.Web.UI.SpellCheckHandler" verb="*" validate="false" />
            <add path="Telerik.Web.UI.DialogHandler.aspx" type="Telerik.Web.UI.DialogHandler" verb="*" validate="false" />
            <add path="Telerik.RadUploadProgressHandler.ashx" type="Telerik.Web.UI.RadUploadProgressHandler" verb="*" validate="false" />
            <add path="Telerik.Web.UI.WebResource.axd" type="Telerik.Web.UI.WebResource" verb="*" validate="false" />
        </httpHandlers>
        <httpModules>
            <add name="RadUploadModule" type="Telerik.Web.UI.RadUploadHttpModule" />
            <add name="RadCompression" type="Telerik.Web.UI.RadCompression" />
        </httpModules>
        <httpRuntime maxRequestLength="10240" />
    </system.web>
</configuration>

这是生成的响应标头http://cdn.test.dev/css/global.css

缓存控制:私人,公共,最大年龄=31536000
内容类型:文本/css
内容编码:压缩
有效期:2020 年 1 月 1 日星期三 00:00:00 GMT
上一次更改:2010 年 9 月 6 日星期一 08:53:06 GMT
接受范围:字节
标签:“0454eca04dcb1:0”
各不相同:接受编码
服务器:Microsoft-IIS/7.5
X-技术支持:网上邻居
日期:2010 年 9 月 6 日星期一 14:57:08 GMT
内容长度:4495

答案1

当我第一次加载 test.dev 的“~/”时,所有文件都会以响应代码 200 加载;当我在 Firefox 中按 F5 时,除“~/default.aspx”之外的所有文件都会以 304 响应代码加载;但按 Ctrl+F5 会再次以 200 代码加载它们;如果我在 test.dev 中浏览另一个 url 如“~/pages/”,所有这些静态文件都会以 200 代码重新加载...这是正常现象还是我做错了什么?

在 Firefox(以及大多数其他浏览器)中,shift+F5 会重新加载网站并忽略缓存。

相关内容