【发布时间】:2011-12-09 12:53:29
【问题描述】:
我正在使用 NuGet 的 HttpClient 0.6.0。
我有以下 C# 代码:
var client = new HttpClient(new WebRequestHandler() {
CachePolicy =
new HttpRequestCachePolicy(HttpRequestCacheLevel.CacheIfAvailable)
});
client.GetAsync("http://myservice/asdf");
服务(这次是 CouchDB)返回一个 ETag 值和状态码 200 OK。返回一个值为 must-revalidate 的 Cache-Control 标头
更新,这里是来自 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
下次我执行完全相同的请求时,HttpClient 会执行条件请求并返回 304 Not Modified。哪个是对的。
但是,如果我使用具有相同 CachePolicy 的低级 HttpWebRequest 类,则甚至不会第二次发出请求。这也是我希望 HttpClient 的行为方式。
是必须重新验证标头值还是为什么 HttpClient 表现不同?我只想做一个请求,然后在没有条件请求的情况下从缓存中获取其余的..
(另外,作为旁注,在调试时,响应状态代码显示为 200 OK,即使服务返回 304 Not Modified)
【问题讨论】:
-
缓存并非易事。你能用这两个调用的请求头更新你的帖子吗?
-
我认为在这种情况下请求标头不是必需的。我很困惑为什么 HttpClient 甚至会进行第二次调用(与 HttpWebRequest 相比,后者只进行一次调用)。
-
通常只有标头与服务器发送给您的内容有关。
-
哦,你的意思是响应头?我会更新那些..
-
你指的 must-revalidate 标头的值是多少?
标签: c# wcf couchdb wcf-web-api