Я использую HttpClient 0.6.0 от NuGet.
У меня есть следующий код С#:
var client = new HttpClient(new WebRequestHandler() {
CachePolicy =
new HttpRequestCachePolicy(HttpRequestCacheLevel.CacheIfAvailable)
});
client.GetAsync("http://myservice/asdf");
Служба (на этот раз CouchDB) возвращает значение ETag и код состояния 200 OK. Возвращается заголовок Cache-Control со значением must-revalidate.
Обновите, вот заголовки ответа от coachdb (взятые из отладчика 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. Какой правильный.
Однако, если я использую низкоуровневый класс HttpWebRequest с той же CachePolicy, запрос даже не выполняется во второй раз. Именно так я хотел бы, чтобы HttpClient также вел себя.
Это значение заголовка, которое необходимо перепроверить, или почему HttpClient ведет себя по-другому? Я хотел бы сделать только один запрос, а затем получить остальные из кеша без условного запроса.
(Кроме того, в качестве примечания, при отладке код состояния ответа отображается как 200 OK, хотя служба возвращает 304 Not Modified)