代码之家  ›  专栏  ›  技术社区  ›  patmortech

ASP.NET缓存.setCacheability(httpCacheability.public)未设置头

  •  2
  • patmortech  · 技术社区  · 16 年前

    我有一个httphandler(也以aspx页的形式执行此操作),它检索存储在数据库中的图像并将其写入响应。我在代码中添加了以下几行,尝试在浏览器中缓存图像,但是每当我在Firebug中查看响应时,它总是有一个缓存控制头值“private”。

    Response.Cache.SetCacheability(HttpCacheability.Public)
    

    我尝试过各种方法,比如使用response.clearHeaders&response.addHeader()手动添加“cache control”头值,但没有任何效果。有什么想法吗?

    编辑:
    更多信息:这是在一个HTTP处理程序(.ashx)中运行的,我已经在本地的IIs5.1和我认为是IIs6的宿主站点上对它进行了测试。

    4 回复  |  直到 15 年前
        1
  •  6
  •   RickNZ    16 年前

    页面是否需要身份验证?运行时将强制对需要身份验证的页执行cache-control:private,以防止在公共代理上意外缓存私有内容。

    你在用卡西尼吗?如果是这样,它总是强制缓存控制:私有。如果是这样,您可以尝试切换到IIS。

        2
  •  1
  •   CodeTwice    16 年前

    刚刚找到这个响应,它帮助了我,但是还有一件事阻止了缓存控制:在我的设置上是public:如果您使用多个response.cache.setcacheability(),比如:

    cache.SetCacheability(HttpCacheability.ServerAndPrivate);
    ...
    cache.SetCacheability(HttpCacheability.Public);
    

    打电话,是 第一 一次成功,因此对setCacheAbility()的后续调用不会覆盖以前的设置。

        3
  •  1
  •   Kevin    15 年前

    不要删除web.config中的身份验证元素。相反,将模式设置为“无”。 如果没有身份验证标记,缓存控件将始终是“私有的”,甚至调用setcacheability。

        4
  •  0
  •   mfeingold    16 年前

    你在哪里设置这个属性?如果您在输出响应主体的第一行之后设置它,它将被忽略。对于页面本身,这意味着您必须在预呈现之前设置此标志。

    推荐文章