2012-06-07 100 views
2

我试图强制刷新HTTP请求。我知道我可以在URL中追加?rnd = seconds_since_epoch,但是相关URL可能已经有了一个查询字符串,我不想破坏它。是否有可以强制刷新的标题?强制HTTP请求不缓存

编辑:

进行实验多一点:一个我测试的页面是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标头时间戳内,则从缓存中提取。

我会离开这里来为下一个人节省很多头痛。

+0

你可以选择从web.config,Global.asax等中禁用,为什么你想只从标题禁用缓存? – shanky

+0

如果URL中已经有查询,可以在查询部分追加'&rnd = seconds_sine_epoch'。如果没有,查询部分将是'?rnd = seconds_sine_epoch'。 –

回答

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标头时间戳内,则从缓存中提取。

我会离开这里来为下一个人节省很多头痛。

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

虽然缓存由浏览器决定的,所以你不能保证头将是有效的,设置缓存控制私人,没有商店,最大年龄= 0似乎运作得很好了我。

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

+0

谢谢,但似乎问题是与缓存积极和忽略这些标头。见上面的编辑。 – nathancahill

+0

够公平的,很高兴你到最后。 :) –