根据超快速ASP.NET:第3章-缓存 :
该浏览器从服务器检索文件应尽可能长时间地保存在浏览器的缓存,以帮助减少服务器往返。
但如何IIS知道什么是静态内容实际上是与不是?
难道仅仅是图片,CSS,JS,而不是 ASPX,ashx的...?
我在哪里可以在IIS中看到已经被认为是静态的 ,什么是不 ?
那如果一个页面已被宣布与该方案<%@ OutputCache
头(无location
)? 是images
, CSS
和JS
源文件里面它也被输出缓存具有相同属性的?
作为最佳实践,我应该规定了一年到未来作为最大到期时间。 我应该把它作为默认的网站上的所有静态内容
所以我这样做:
但后来,压紧以后OK
,我找不到任何汇总菜单,显示我: 谁我已经把一个响应报头(在这种情况下:在css
文件夹)。
目前 ,为了看到css
文件夹已被应用与响应报头-我必须去css
再次文件夹-->
HTTP响应头-->
设置公用集-->
然后我看到它。 它不是写在web.config中。
但是 ,如果我的文件做( Login.aspx
为例):我看到它在web.config中:
<configuration>
<location path="Login.aspx">
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseExpires" cacheControlMaxAge="1.00:00:00" httpExpires="Fri, 15 Feb 2013 00:00:00 GMT" />
</staticContent>
</system.webServer>
</location>
</configuration>
我理解你的处境。 有时它混淆IIS如何处理的文件。 其也为不同IIS 6 VS IIS 7和用于经典应用池和集成模式应用程序池不同。 我的经验主要是与IIS 7.5集成的应用程序池,因此多数民众赞成环境我可以最准确地评论。
第一个问题
但如何做IIS知道实际上是一个静态的内容,哪些不是?
难道仅仅是图片,CSS,JS,而不是ASPX,ashx的...?
我在哪里可以在什么已经被认为是静态的,什么不是IIS看到了什么?
您可以通过导航到你的网站检查在IIS中的文件处理程序的列表,然后单击“处理程序映射”。 默认情况下,这些都是从.NET基的web.config这是根据您的.NET Framework版本不同的位置继承。
- C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \ CONFIG \ web.config中
- C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ CONFIG \ web.config中
如果被请求的文件是不是已经明确映射到另一个处理它属于一个包罗万象的处理器( *
)作为最后一个选项( System.Web.DefaultHttpHandler
这就决定它是否是一个静态文件或目录浏览请求)。 因此,静态文件只是文件未绑定到另一个处理程序了。 例如,你会看到*.aspx
已映射到System.Web.UI.PageHandlerFactory
在此之前默认的处理器。 因此,它要通过处理程序来处理,而不是被认为是一个静态文件。 如果删除该映射,你可以在技术上成为*的.aspx作为一个静态文件,如果你真的想(只是它是如何工作的证明)。
但是,你也可以明确地通过添加在你的web.config的HttpHandlers的部分映射的文件扩展名的条目列表的文件类型为静态文件System.Web.StaticFileHandler
在IIS。 例如:
<configuration>
<system.webServer>
<handlers>
<add name="StaticHandler" verb="*" path="*.zip" type="System.Web.StaticFileHandler" preCondition="integratedMode" />
</handlers>
</system.webServer>
</configuration>
本实施例中是使用<system.webServer>
配置部分,所以它的一个应用程序池在组合模式下运行。
第二个问题
那如果一个页面已被宣布与<%@的OutputCache头(无位置)的情况。 确实它里面的图片,CSS,JS文件的src,也正在输出缓存具有相同属性的?
号由于页面被服务器作为一个单独的请求(甚至通过一个单独的处理器),它可以有完全不同的缓存头/提示。 主机页面,它可以使用的资源不是从高速缓存的角度有关。
事实上,你甚至可能想为*。html的较短的缓存时段和较长的缓存期* .jpg或*。PNG? 要考虑的事情。
第三个问题
作为最佳prcatice,我应该规定了一年到未来作为最大到期再寄一次应该使用它作为默认的网站上的所有静态内容
嗯...我可能不会远至一年去。 如何约一个月? 我想设置这样一个全球性的政策:
<configuration>
<system.webServer>
<staticContent>
<!-- Set expire headers to 30 days for static content-->
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" />
</staticContent>
</system.webServer>
</configuration>
这是一样的,你上述显示样品,但不是一个内部<location>
元素,相反,它是在右根<configuration>
元件,从而它是默认策略。 再次,这是一个应用程序池在集成模式下运行。 有时你也需要打开:
<configuration>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<!-- stuff -->
</modules>
</system.webServer>
<system.webServer>
这只是确保在静态文件是通过哪些方面的上述配置元素的管理静态文件处理程序处理。
编辑到地址评论
为你张贴以上位于此处配置对话框的文档: 配置HTTP过期响应头(IIS 7)
显然,这些设置保存在 C:\ WINDOWS \ SYSTEM32 \ INETSRV \设置\的applicationHost.config
我没有IIS7和个人发展上的IIS 7.5的现在。 所以,请发表评论,如果你可以验证这个位置是准确的!
- 静态内容是IIS是阅读和发送到浏览器而不进行处理的一个。 在那里,你可以设置IIS包括一些
Cache-Control Header
缓存它在客户端浏览器的计算机。 - 您可以通过直接设置IIS做乙醚,通过在命令醚
web.config
像你说的。 您在web.config中和关注IIS添加的命令,没有与asp.net它自己的事,但IIS和IIS当您更改直接在高速缓存控制头拯救他的配置在不同的文件,所以IIS你没有看到他们在web.config中。 - 现在,像图片,CSS,JavaScript和其它类似文件的静态内容,他们说,你可以通过加入10年后过期遵循“永不过期”的政策。
- 这里的问题是,如果你不能改变静态文件的内容,例如,如果您缓存拥有10年的JavaScript文件,你就成为一个小的变化,那么你需要乙醚更改文件名,乙醚在它的末尾添加一些参数。
- 现在
<%@ OutputCache
上的控件被称为服务器缓存,而不是客户端,以及什么是真正做的是缓存渲染服务器上的控制,以便下一次你问它的时候不抓紧时间呈现再次但是从缓存中读取它 - 仍然是其发送给浏览器。
而且你还可以阅读这个答案更多: 什么是IIS(动态和静态)缓存,输出缓存和浏览器缓存之间的差异