nat*_*ill 4 caching http pyqt pyqt4
我正在尝试强制刷新 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 标头时间戳内,则从缓存中获取。
我将把这个留在这里,以免给下一个人带来很多麻烦。
Cache-Control: private, no-store, max-age=0
Run Code Online (Sandbox Code Playgroud)
虽然缓存是由浏览器决定的,所以你不能保证标头有效,但将 Cache-Control 设置为 private、no-store、max-age=0 似乎对我来说效果很好。
另请确保将 Expires 标头设置为当前日期/时间。这就是为什么浏览器会在下一个请求时看到其现有内容已过期。