3

我正在尝试强制刷新 HTTP 请求。我知道我可以将 ?rnd=seconds_since_epoch 附加到 URL,但有问题的 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 标头时间戳内,则从缓存中获取。

我将把它留在这里,以免给下一个人带来很多麻烦。

4

2 回答 2

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

尽管缓存是由浏览器决定的,因此您不能保证标头有效,但将 Cache-Control 设置为 private、no-store、max-age=0 似乎对我来说效果很好。

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

于 2012-06-07T08:04:49.443 回答
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 标头时间戳内,则从缓存中获取。

我将把它留在这里,以免给下一个人带来很多麻烦。

于 2012-06-07T09:12:51.623 回答