如何在ASP.NET应用程序中设置S-MaxAge CacheControl值?

9
我正在尝试设置一个 ASP.NET 资源的可缓存性。因此,如果我转到 /foo/show,它将显示一些资源的视图,并将其缓存几个小时(例如)。为此,我使用 OutputCache 属性装饰我的操作方法。此缓存的详细信息(针对此操作方法)在 web.config 文件中找到。
当我设置此输出缓存时,它会正确地设置 maxage 值,但 s-maxage 值为 0。为什么会这样呢?
以下是代码:
[Authorize]
[OutputCache(CacheProfile = "SomeController_Show")]
public ActionResult Show(){ ... }

这里是配置文件的片段:

<add name="SomeController_Show" duration="3600" varyByParam="authkey;format;blah"  />

以下是响应的片段:

Cache-Control:public, max-age=3576, **s-maxage=0**
Content-Length:746
Content-Type:application/json; charset=utf-8
Date:Tue, 10 Aug 2010 00:42:17 GMT
Expires:Tue, 10 Aug 2010 01:41:53 GMT
Last-Modified:Tue, 10 Aug 2010 00:41:53 GMT
Server:Microsoft-IIS/7.0
Vary:*

注意 maxage 被正确设置了,但是 s-maxage 没有被设置?
1个回答

13
我找到了答案,[AuthorizeAttribute] 将任何maxage清零。这意味着没有代理会缓存需要 授权 的视图结果。

我猜测代理通过 URL 缓存内容,所以如果 URL 不包含任何身份验证细节(实际上不应该...:)),那么它如何知道两个不同的请求是否是同一个人发出的呢?
(我添加了这个答案而不是删除它,以帮助其他开发人员解决此问题)。
另外,类似的问题:请有人解释一下这个 ASP.NET MVC 代码块给我,好吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接