WCF Web API中的HTTP缓存在浏览器中似乎不一致
我正在使用WCF Web API实现一个简单的REST服务,并试图设置HTTP头以缓存响应。
对于这样一个简单的GET
http://localhost:49302/my/2
响应标题如下所示:
Server: ASP.NET Development Server/10.0.0.0
Date: Tue, 24 Jan 2012 18:18:44 GMT
X-AspNet-Version: 4.0.30319
Content-Length: 233
Cache-Control: max-age=120
Vary: Accept
Expires: Tue, 24 Jan 2012 18:20:44 GMT
Last-Modified: Tue, 24 Jan 2012 18:18:15 GMT
Content-Type: application/xml; charset=utf-8
目的是客户端应该缓存资源两分钟。
但是,使用WCF Web API测试客户端时,各种浏览器的行为不一致:
为什么Chrome和IE不尊重缓存头?
它是WCF Web API测试客户端中的错误吗?
缓存很难得到正确的。 浏览器可能会忽略缓存指令的事实当然无济于事。
根据这个文档,IE从不缓存任何包含除Accept-Encoding和User-Agent以外的任何Vary头的请求
如果我用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是否真的需要,但建议使用它。 看到这里的规格。
测试用“真正的域”替换本地主机,所以WCF测试客户端或Chrome / IE没有任何本地主机的特殊技巧。
链接地址: http://www.djcxy.com/p/55741.html上一篇: HTTP caching in WCF Web API seems inconsistent across browsers