Я flumoxed... re 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")]
повторно и неправильно, обслуживающий либо 304 (без изменений), если вы включаете if-modified-since или старые данные для 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
, наконец, получил свежие данные), но не в любом месте, как пунктуально.
UPDATE:
Я считал, что он работает, если мы забрали заголовок accept-encoding, но no; это тоже не сработает - он просто терпит неудачу в другом цикле (чего и следовало ожидать, поскольку ключи разные, любезно 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()
правильно вызывает base.GetVaryByCustomString(ctx, custom)
для параметров, которые он не распознает, согласно MSDN (действительно, это работает отлично для второго примера выше).