Internet Information Services (IIS) 7.0 有输出缓存功能,可将动态内容在内存中缓存(例如,来自 Microsoft® ASP.NET、经典 Active Server Pages (ASP)、PHP 或其他动态页面的输出)。 这有助于提高性能,因为用于生成动态输出的脚本不需要为每个请求运行。缓存可以根据从客户端发送到服务器的查询字符串值和 HTTP 头改变所缓存的输出。 缓存还与 HTTP.sys 内核模式驱动程序集成以帮助提高性能速度。 IIS 会自动缓存静态内容(HTML 页面、图像和样式表),因为在多次请求中这些类型的内容是不变的。 IIS 还会检测更新文件中的更改,并根据需要刷新缓存。 现在也可以将来自动态页面的输出缓存在内存中。 但是并非每个动态页面都可以有效使用输出缓存。 可以个性化的页面,例如购物车或电子商务交易页面无法使用输出缓存,因为动态输出也许不会收到重复请求。 对 HTML 表单的 POST 类型请求所导致的内容输出也不能缓存。 输出缓存对于半动态性质的页面效果良好,例如数据是动态生成的,但在多次请求中不太可能根据 URL 或标头信息变化。举例来说,照片库应用程序会动态地重设图像大小以便在网页上显示,可使用输出缓存以免服务器不得不为每个请求重新处理图像的大小重设。 另一个可以使用输出缓存功能的应用程序例子是证券报价应用程序。 例如,您有一个应用程序,它允许用户输入股票代码,而用户向应用程序提交了下列代码:http://server/showStockPrice.asp?symbol=MSFT 在这个案例中,URL 始终是 http://server/showStockPrice.asp,但查询字符串值 (symbol=MSFT) 告诉 showStockPrice.asp 页面应在响应中包含哪个数据,从而使页面的输出可根据查询字符串值变化。 这种缓存策略称为 varyByQuerystring。 IIS 还支持另一种称为 varybyHeaders 的缓存策略,它可根据从客户端发送到服务器的 HTTP 头改变缓存。 缓存此数据的输出很有用,这样可以避免服务器在每次请求后都不得不为特定代码查找当前股价。 因为您缓存的是动态数据,所以要牢记数据是会变的。 您必须刷新缓存,才可检索和重新缓存新数据。 在这个例子中,股价很可能频繁变化。即使股价每秒钟都在变,如果站点每秒收到数以百计的请求,缓存数据仍然会是有用的。 缓存数据只需要访问数据库一次来检索股价,而不必每秒发出上百条请求,这样就可让 Web 服务器和数据库服务器避免不必要的工作。 IIS 支持两种用于动态内容的验证方案。第一种是简单的超时设定,使用配置属性 CacheForTimePeriod。 另一种验证缓存的方法是让 IIS 检测基础资源的更改。用于这种方案的配置属性是 CacheUntilChange。 只有当您希望在基础资源(在这个例子中是 showStockPrice.asp)更改后刷新缓存时才应使用这种类型的验证方案。 可以使用 IIS 管理器配置缓存。 打开“IIS 管理器”,然后移至服务器级别。 双击“输出缓存”。 在“操作”窗格中,单击“添加”。 在“添加缓存规则”对话框的“文件扩展名”文本框中,键入 .php。 选择“用户模式缓存”复选框。 单击“高级”。 在“高级输出缓存规则设置”对话框中,选择“查询字符串变量”复选框,然后在文本框中键入您的变量。 单击“确定”关闭“高级输出缓存规则设置”和“添加缓存规则”对话框。 您还可以在本地 Web.config 文件中配置缓存功能,它位于 content 目录下。 以下是 showStockPrice.asp 页面所需配置的示例,该页面有设为 * 的 varyByQueryString 参数和 1 秒的超时(以星号作为此参数的值表示缓存查询字符串参数的所有独特变体): <configuration> <location path="showStockPrice.asp"> <system.webserver> <caching> <profiles> <add varybyquerystring="*"location="Any" duration="00:00:01" policy="CacheForTimePeriod" extension=".asp"> </profiles> </caching> </system.webserver> </location> </configuration> 如果为了进一步提高性能,要将数据缓存在内核中,可将 policy 属性改为 kernelCachePolicy。 有关输出缓存的详细信息,请参阅 IIS 7.0 输出缓存(可能为英文页面)。 这篇文章提供了故障排除提示、输出缓存的端到端示例以及关于如何在 IIS 7 中使用此新功能的更多信息。 注意:ASP.NET 也有输出缓存功能。 IIS 输出缓存功能是与 ASP.NET 缓存并行工作的。配置输出缓存