2016-12-06 2 views
3

私はWebビューベースのモバイルアプリケーションとexpress.jsベースのバックエンドを開発しています。技術的には、埋め込まれたクロムブラウザとHTTPエンドポイントがあります。私のアプリでレスポンスがキャッシュされていてもオフラインのときに「Cache-Control:only-if-cached」が失敗する

、私はダッシュボードを持っている、と私はそれがこのように動作したいと思います:

  1. は、サーバが常にペイロードとLast-Modifiedヘッダで200 OKで応答(サーバーから最新のデータを取得、または304 Not Modifiedなしコンテンツ)
    • ブラウザが応答がまだキャッシュされていない場合は - そうCache-Control: max-age=0
    • と通常のリクエストを行う - 常にIf-Modified-Since HEAとの条件付きリクエストを行いますキャッシュされた応答が得られるか、見つからない場合に失敗するかと思われCache-Control: only-if-cached要求を行うバックブラウザのキャッシュ
      • にフォール - オフライン/ネットワークエラーが場合
    • DER。

問題は、サーバーがダウンしているとき、Cache-Control: only-if-cachedとフォールバック要求は常に失敗した、ということです。特に、ブラウザが応答をキャッシュしていても失敗します(最初に私が200 OKを取得してキャッシュされていることがわかります)。また、コンテンツがない304 Not Modifiedを受け取っても2番目の要求で応答コンテンツが得られます。 。それでなぜ失敗するのですか?または、キャッシュ関連のヘッダーをどのように構成して、説明どおりに動作させる必要がありますか?

私が実行している:

  • クロームのWebView V54
  • githubの/ポリフィルをフェッチ(私は裸のHTTPヘッダーに動作してるようそれは本当に、重要ではありません)
  • express.jsを4.14.0 ETagsを無効にしました

その他の注意:ダッシュボードはオフラインで動作するようにサービスエンジニアを使用する可能性がありますが、プレーンなHTTPヘッダーとブラウザキャッシュで同じ機能を実行する必要があります。

答えて

0

はい、これはHTTPの定義されたキャッシュ動作で可能ですが、ブラウザが仕様をサポートしている場合にのみ可能です。

Chromiumのソースでは、only-if-cachedはサードパーティのモジュール(only-if-cachedpackage:chromium)にのみ表示されるようです。これは、ヘッダーがChromeでサポートされていない可能性があることを示しています。

関連する問題