我搞砸了......重新this和this“元”问题......
一个非常基本的http请求:
GET http://stackoverflow.com/feeds/tag?tagnames=c%23&sort=newest HTTP/1.1
Host: stackoverflow.com
Accept-Encoding: gzip,deflate
命中装饰的路线:
[OutputCache(Duration = 300, VaryByParam = "tagnames;sort",
VaryByContentEncoding = "gzip;deflate", VaryByCustom = "site")]
如果您包含if-modified-since或旧数据,则重复 并且错误地 提供304(无更改) 200,即
HTTP/1.1 200 OK
Cache-Control: public, max-age=0
Content-Type: application/atom+xml; charset=utf-8
Content-Encoding: gzip
Expires: Fri, 01 Jul 2011 09:17:08 GMT
Last-Modified: Fri, 01 Jul 2011 09:12:08 GMT
Vary: *
Date: Fri, 01 Jul 2011 09:42:46 GMT
Content-Length: 14714
(payload, when decoded = some long-stale data)
正如你所看到的那样,它正在服务这个近半小时过去 5分钟的时间段;看起来OutputCache的内部结构根本没有注意到时间; p它最终将到期(事实上,它刚刚完成 - 我的Fri, 01 Jul 2011 09:56:20 GMT
请求终于获得了新数据),但不是像准时的那样。
更新:
我相信如果我们拿走了accept-encoding标头就行了,但是没有;这也失败了 - 它只是在一个不同的循环中失败(这是我们应该期望的,因为密钥是不同的,由VaryByContentEncoding
提供):
GET http://stackoverflow.com/feeds/tag?tagnames=c%23&sort=newest HTTP/1.1
Host: stackoverflow.com
给出:
HTTP/1.1 200 OK
Cache-Control: public, max-age=0
Content-Type: application/atom+xml; charset=utf-8
Expires: Fri, 01 Jul 2011 10:09:58 GMT
Last-Modified: Fri, 01 Jul 2011 10:04:58 GMT
Vary: *
Date: Fri, 01 Jul 2011 10:17:20 GMT
Content-Length: 66815
(payload = some stale data)
再一次,您会注意到 Expires
之后正在投放
那么:这里可能出现什么问题?
附加;当我们使用自定义选项时,我们的GetVaryByCustomString()
会根据MSDN正确调用base.GetVaryByCustomString(ctx, custom)
以查找无法识别的选项(事实上,这适用于上面的第二个示例)。
答案 0 :(得分:10)
您是否有可能使用自定义输出缓存提供程序? 假设,如果有一个自定义提供者使用滑动过期而不是绝对过期,你会看到这样的症状。