HTTP caching internals: fix logic for PreferNetwork and PreferCache
This commit is contained in:
parent
2aba57d58e
commit
a5562d345b
@ -441,6 +441,11 @@ bool QNetworkReplyHttpImplPrivate::loadFromCacheIfAllowed(QHttpNetworkRequest &h
|
|||||||
httpRequest.setHeaderField("If-Modified-Since", QNetworkHeadersPrivate::toHttpDate(lastModified));
|
httpRequest.setHeaderField("If-Modified-Since", QNetworkHeadersPrivate::toHttpDate(lastModified));
|
||||||
|
|
||||||
if (CacheLoadControlAttribute == QNetworkRequest::PreferNetwork) {
|
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");
|
it = cacheHeaders.findRawHeader("Cache-Control");
|
||||||
if (it != cacheHeaders.rawHeaders.constEnd()) {
|
if (it != cacheHeaders.rawHeaders.constEnd()) {
|
||||||
QHash<QByteArray, QByteArray> cacheControl = parseHttpOptionHeader(it->second);
|
QHash<QByteArray, QByteArray> cacheControl = parseHttpOptionHeader(it->second);
|
||||||
@ -1422,7 +1427,7 @@ QNetworkCacheMetaData QNetworkReplyHttpImplPrivate::fetchCacheMetaData(const QNe
|
|||||||
attributes.insert(QNetworkRequest::HttpStatusCodeAttribute, statusCode);
|
attributes.insert(QNetworkRequest::HttpStatusCodeAttribute, statusCode);
|
||||||
attributes.insert(QNetworkRequest::HttpReasonPhraseAttribute, reasonPhrase);
|
attributes.insert(QNetworkRequest::HttpReasonPhraseAttribute, reasonPhrase);
|
||||||
} else {
|
} 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();
|
attributes = oldMetaData.attributes();
|
||||||
}
|
}
|
||||||
metaData.setAttributes(attributes);
|
metaData.setAttributes(attributes);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user