Mik*_*ynn 7 .net asp.net-mvc caching outputcache http-status-code-410
我想为执行一些数据库查找的页面抛出 410 状态代码。然而,outputcache 似乎只缓存 200 个状态代码页。有没有办法解决?我想将 410 页缓存一段时间,这样数据库就无法获取它,但它只是跳过缓存并再次访问数据库。
[OutputCache(Duration = 3600, VaryByParam = "eventid,teamid,v,r")]
public virtual ActionResult Team(int? teamId, int? eventId)
{
Run Code Online (Sandbox Code Playgroud)
OutputCache 和几乎所有 HTTP 级别的缓存都被设计为忽略失败的响应,除了 399 之外的任何内容,所有高于 399 的状态代码都是错误代码。
\n您可以手动设置响应标头,例如
\ncontext.Response.Headers.CacheControl = "public, max-age=3600"\nRun Code Online (Sandbox Code Playgroud)\n这是OutputCache内部所做的,但是,OutputCache如果设置的话,也可能提供服务器级缓存。
但如果您使用 CDN,我怀疑他们会在响应状态代码失败的情况下尊重缓存控制。
\n但不建议这样做。假设由于某种原因用户删除了 cookie 或 cookie 被损坏。用户收到 410 错误。用户返回登录并正确登录,现在对于同一请求,用户将继续收到 410 一小时。
\n或者让\xe2\x80\x99s 说你的数据库不可用并且数据库抛出410错误,所以即使有有效的cookie或有效的授权,用户也会收到缓存的错误响应。缓存层不知道何时不缓存。
\n相反,您可以使用MemoryCache, 将错误结果缓存在内存中几秒钟,而不必每次都访问数据库。尽管结果仍然会到达网络服务器。
CloudFlare 和 Azure 提供 Web 应用程序防火墙,如果您担心 DDOS 类型的攻击,它可以智能地阻止错误流量。这种方法似乎比使用 HTTP 缓存更好,因为您无法控制用户的缓存。并且您无法在成功登录后以编程方式清除缓存。
\n| 归档时间: |
|
| 查看次数: |
192 次 |
| 最近记录: |