我正在使用NuGet的HttpClient 0.6.0.
我有以下C#代码:
var client = new HttpClient(new WebRequestHandler() {
CachePolicy =
new HttpRequestCachePolicy(HttpRequestCacheLevel.CacheIfAvailable)
});
client.GetAsync("http://myservice/asdf");
Run Code Online (Sandbox Code Playgroud)
该服务(这次是CouchDB)返回ETag值和状态代码200 OK.返回一个Cache-Control标头,其值为must-revalidate
更新,这是来自couchdb的响应头(取自visual studio调试器):
Server: CouchDB/1.1.1 (Erlang OTP/R14B04)
Etag: "1-27964df653cea4316d0acbab10fd9c04"
Date: Fri, 09 Dec 2011 11:56:07 GMT
Cache-Control: must-revalidate
Run Code Online (Sandbox Code Playgroud)
下次我执行完全相同的请求时,HttpClient会执行条件请求并返回304 Not Modified.哪个是对的.
但是,如果我使用具有相同CachePolicy的低级HttpWebRequest类,则第二次甚至不会发出请求.这就是我希望HttpClient也表现的方式.
它是必须重新验证的标头值还是为什么HttpClient表现不同?我想只做一个请求,然后在没有条件请求的情况下从缓存中获取其余的请求.
(另外,作为附注,在调试时,响应状态代码显示为200 OK,即使服务返回304 Not Modified)