Mar*_*ell 11 .net asp.net asp.net-mvc outputcache
一个非常基本的http请求:
GET http://stackoverflow.com/feeds/tag?tagnames=c%23&sort=newest HTTP/1.1
Host: stackoverflow.com
Accept-Encoding: gzip,deflate
Run Code Online (Sandbox Code Playgroud)
击中路线装饰:
[OutputCache(Duration = 300, VaryByParam = "tagnames;sort",
VaryByContentEncoding = "gzip;deflate", VaryByCustom = "site")]
Run Code Online (Sandbox Code Playgroud)
如果你包括if-modified-since,或者200 的旧数据,即重复和错误地服务304(无变化),即
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)
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它是服务于这个近半个小时过去的 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
Run Code Online (Sandbox Code Playgroud)
得到:
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)
Run Code Online (Sandbox Code Playgroud)
再一次,你会注意到它正在服务之后 Expires.
那么:这里可能出现什么问题?
额外; 当我们使用自定义选项时,我们GetVaryByCustomString()正确地调用base.GetVaryByCustomString(ctx, custom)它无法识别的选项,如MSDN(事实上,这适用于上面的第二个示例).
Nic*_*ver 10
您是否有可能使用自定义输出缓存提供程序? 假设有一个自定义提供者使用滑动过期而不是绝对过期,你会看到这样的症状.
| 归档时间: |
|
| 查看次数: |
1593 次 |
| 最近记录: |