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