在Windows 2008 R2上,使用DNS和IIS,我build立了我的开发testing服务器; 即我将有一个Web应用程序,我可以浏览http://test.dev
我将所有静态内容文件(如图像,js文件和css文件)移动到另一个可在http://cdn.test.dev上看到的应用程序
test.dev,使用cdn.test.dev URL像http://cdn.test.dev/js/jquery.js加载js,css和图像。
当我第一次加载test.dev的“〜/”时,所有的文件都会加载一个响应代码200; 当我在Firefox中按F5时,除了“〜/ default.aspx”之外的所有文件都将加载304响应代码; 但按Ctrl + F5再加载一个200代码; 如果我在test.dev中浏览另一个类似“〜/ pages /”的URL,那么所有这些静态文件都将重新加载一个200代码… 这是正常的还是我做错了什么?
其实我正在寻找这样的行为:
我希望客户端只加载一次http://cdn.test.dev/js/jquery.js 。 我希望客户端的浏览器在test.dev的所有其他页面上使用这个来自caching的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的结果响应头:
Cache-Control: private,public,max-age = 31536000
内容types:文本/ CSS
内容编码: gzip
到期时间:周一,2020年1月1日00:00:00 GMT
Last-Modified: Mon,06 Sep 2010 08:53:06 GMT
接受范围:字节
Etag: “0454eca04dcb1:0”
变化:接受编码
服务器: Microsoft-IIS / 7.5
X-Powered-By: ASP.NET
date: 2010年9月6日星期一14:57:08 GMT
内容长度: 4495
当我第一次加载test.dev的“〜/”时,所有的文件都会加载一个响应代码200; 当我在Firefox中按F5时,除了“〜/ default.aspx”之外的所有文件都将加载304响应代码; 但按Ctrl + F5再加载一个200代码; 如果我在test.dev中浏览另一个类似“〜/ pages /”的URL,那么所有这些静态文件都将重新加载一个200代码…这是正常的还是我做错了什么?
在Firefox(和大多数其他浏览器)shift + F5重新加载站点忽略caching。