强制HTTP请求不缓存

时间:2012-06-07 07:50:27

标签: http caching pyqt pyqt4

我正在尝试强制刷新HTTP请求。我知道我可以在URL中附加?rnd = seconds_since_epoch,但是有问题的URL可能已经有了我不想破解的查询字符串。是否有我可以设置强制刷新的标题?

编辑:

尝试一点:我正在测试的其中一个页面是stackoverflow.com。在HTTP响应中,它将Expires设置为距离请求一分钟。浏览器似乎忽略了我设置的“private,no-store,max-age = 0”和Expires标头,并将响应缓存一分钟。 我不想深入研究PyQt网络,所以我将使用?rnd = seconds方法。

这可能会破坏看到未知GET变量的页面吗?

编辑2:

我确实深入挖掘了一下,事实证明QNetworkRequest CacheLoadControl默认覆盖QWebSettings setObjectCacheCapacities(),setMaximumPagesInCache()甚至clearMemoryCaches()!

诀窍是将QNetworkRequest的CacheLoadControl设置为0,或者将AlwaysNetwork(http://qt-project.org/doc/qt-4.8/qnetworkrequest.html#CacheLoadControl-enum)设置为。默认值为1,PreferNetwork,如果它在Expires标头时间戳内,则从缓存中提取。

我会把它留在这里为下一个人省下很多头痛。

2 个答案:

答案 0 :(得分:2)

Cache-Control: private, no-store, max-age=0

虽然缓存是由浏览器决定的,所以你不能保证标题有效,将Cache-Control设置为private,no-store,max-age = 0似乎对我来说效果很好。

还要确保将Expires标头设置为当前日期/时间。这就是为什么浏览器会在下一个请求中看到他们现有的内容已过期。

答案 1 :(得分:1)

我确实深入挖掘了一下,事实证明QNetworkRequest CacheLoadControl默认覆盖QWebSettings setObjectCacheCapacities(),setMaximumPagesInCache()甚至clearMemoryCaches()!

诀窍是将QNetworkRequest的CacheLoadControl设置为0,或者将AlwaysNetwork(http://qt-project.org/doc/qt-4.8/qnetworkrequest.html#CacheLoadControl-enum)设置为。默认值为1,PreferNetwork,如果它在Expires标头时间戳内,则从缓存中提取。

我会把它留在这里为下一个人省下很多头痛。