Я использую 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
Обновить, вот заголовки ответов из couchdb (взяты из отладчика визуальной студии):
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 тоже вел себя.
Является ли это обязательным-revalidate значением заголовка или почему HttpClient ведет себя по-другому? Я хотел бы сделать только один запрос, а затем остальное из кэша без условного запроса.
(Кроме того, в качестве побочного примечания при отладке код статуса ответа отображается как 200 OK, даже если служба возвращает 304 без изменений)