【问题标题】:Caching the response of an ASP.NET HTTP Handler server and client side缓存 ASP.NET HTTP 处理程序服务器和客户端的响应
【发布时间】:2011-01-26 11:14:36
【问题描述】:

是否可以在服务器和客户端缓存 http 处理程序的响应?

这似乎不起作用:

_context.Response.Cache.SetCacheability(HttpCacheability.Public); _context.Response.Cache.SetExpires(DateTime.Now.AddDays(7));

_context 是作为参数传递给 IHttpHandler 实现上的 ProcessRequest 方法的 HTTPContext。

有什么想法吗?

更新:客户端确实缓存了通过 httphandler 加载的图像,但如果另一个客户端执行相同的调用,则服务器没有缓存它。因此,对于每个请求图像的客户端,服务器都会转到数据库(和文件流)。如果我们使用 aspx 页面而不是 httphandler 和缓存配置文件,那么图像会同时缓存在客户端和服务器上。

【问题讨论】:

  • 您是否尝试过使用 Fiddler 来检查标头是否真的在客户端收到的数据包中?
  • @Timores 客户端会缓存对处理程序的调用,但如果另一个客户端执行相同的调用,则服务器不会缓存它。

标签: asp.net iis caching httphandler


【解决方案1】:

感谢您在 cmets 中的回答。

Cache.SetCacheability 用于定义是否允许代理或客户端缓存,而不是在服务器上。

查看IIS 7,其中解释了如何在服务器上缓存 HTTP 处理程序的输出。

【讨论】:

  • 谢谢,Timores,我们会检查的!奇怪的是,使用 aspx 页面可以在服务器级别缓存,但使用 httplevel 需要在 IIS 中执行(或者 iis 会将更改保存在 web.config 中?)
【解决方案2】:

使用 IIS7,这可以在 web.config 中完成。

例如,假设你的 ashx url 是:

/ashxfiles/myhandler.ashx

...并且您想通过查询字符串参数来改变:

id,语言

将以下内容添加到您的 web.config:

<location path="ashxfiles">
    <system.webServer>
        <caching>
            <profiles>
                <add extension=".ashx" policy="CacheForTimePeriod" duration="00:00:10" varyByQueryString="id, lang" />
            </profiles>
        </caching>
    </system.webServer>
</location>

此规则适用于目录中的所有 .ashx 文件,因此如果您需要更精细地控制缓存设置,您可能希望将 .ashx 文件放在单独的文件夹中。

【讨论】:

    猜你喜欢
    • 2021-10-07
    • 1970-01-01
    • 2012-07-05
    • 2017-05-30
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多