3

HTTPリクエストを強制的に更新しようとしています。URLに?rnd = seconds_since_epochを追加できることはわかっていますが、問題のURLには、中断したくないクエリ文字列が既に含まれている可能性があります。強制的に更新するように設定できるヘッダーはありますか?

編集:

もう少し実験してください:私がテストしているページの1つはstackoverflow.comです。HTTP応答では、Expiresをリクエストから1分に設定します。ブラウザは、私が設定している「private、no-store、max-age = 0」とExpiresヘッダーを無視しているようで、応答を1分間キャッシュします。PyQtネットワーキングを深く掘り下げたくないので、?rnd=secondsメソッドを使用します。

これにより、不明なGET変数が表示されるページが破損する可能性がありますか?

編集2:

もう少し掘り下げてみたところ、QNetworkRequestCacheLoadControlのデフォルトがQWebSettingssetObjectCacheCapacities()、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

もう少し深く掘り下げてみたところ、QNetworkRequestCacheLoadControlのデフォルトがQWebSettingssetObjectCacheCapacities()、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 に答える