Кэширование трудно понять правильно.Тот факт, что браузер может игнорировать директивы кэша, безусловно, не помогает.
Согласно этому документу IE никогда не кэшировал ни одного запроса с заголовком Vary, содержащим что-либо, кроме Accept-Encoding и User-Agent.
Если я протестирую это с 15-секундным периодом кеширования и просто установлю MaxAge и MustRevalidate, то, похоже, он отлично работает с IE9, FireFox и Chrome.
Web API HttpResponseMessage:
result = new HttpResponseMessage<Book>(book);
result.Headers.CacheControl = new CacheControlHeaderValue();
result.Headers.CacheControl.MaxAge = TimeSpan.FromSeconds(15);
result.Headers.CacheControl.MustRevalidate = true;
return result;
Заголовки ответа:
HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Wed, 25 Jan 2012 09:13:32 GMT
X-AspNet-Version: 4.0.30319
Content-Length: 98
Cache-Control: must-revalidate, max-age=15
Content-Type: application/json; charset=utf-8
Connection: Close
Я не уверен, что MustRevalidate действительно требуется, но его рекомендуется использовать.Смотрите спецификации здесь .