HTTP caching internals: fix logic for PreferNetwork and PreferCache

This commit is contained in:
Peter Hartmann 2011-04-08 15:08:05 +02:00 committed by Markus Goetz
parent 2aba57d58e
commit a5562d345b

View File

@ -441,6 +441,11 @@ bool QNetworkReplyHttpImplPrivate::loadFromCacheIfAllowed(QHttpNetworkRequest &h
httpRequest.setHeaderField("If-Modified-Since", QNetworkHeadersPrivate::toHttpDate(lastModified));
if (CacheLoadControlAttribute == QNetworkRequest::PreferNetwork) {
// PreferNetwork == send request with "If-None-Match" and "If-Modified-Since" header,
// which will return a 304 Not Modifed if resource has not been changed.
// We might read from cache later, if receiving a 304.
return false;
} else if (CacheLoadControlAttribute == QNetworkRequest::PreferCache) {
it = cacheHeaders.findRawHeader("Cache-Control");
if (it != cacheHeaders.rawHeaders.constEnd()) {
QHash<QByteArray, QByteArray> cacheControl = parseHttpOptionHeader(it->second);
@ -1422,7 +1427,7 @@ QNetworkCacheMetaData QNetworkReplyHttpImplPrivate::fetchCacheMetaData(const QNe
attributes.insert(QNetworkRequest::HttpStatusCodeAttribute, statusCode);
attributes.insert(QNetworkRequest::HttpReasonPhraseAttribute, reasonPhrase);
} else {
// this is a redirection, keep the attributes intact
// this is the server telling us the resource has not changed, keep the attributes intact
attributes = oldMetaData.attributes();
}
metaData.setAttributes(attributes);