サービスワーカーを構築し、常にキャッシュからのデータで応答し、バックグラウンドでサーバーに要求を送信します。サーバーがHTTP 304 - not modified
で応答する場合、サーバーがHTTP 200
と応答すると、データが変更され、新しいファイルがキャッシュに入れられ、ユーザーに通知されてページの更新が求められます。サービスワーカー/ fetch()でHTTP 304を認識
私はnot-modified-since
/last-modified
ヘッダーを使用して、クライアントが最新のバージョンを取得していることを確認します。 fetch()
を介して要求が送信されると、HTTPキャッシュがネットワークに渡されます。また、HTTPキャッシュがクライアントに到着したときにHTTPキャッシュが渡されます。問題は、応答がステータスが304
で、HTTPキャッシュがキャッシュされたバージョンのサービスワーカーに応答し、ステータスが200
(fetch specification - HTTP-network-or-cache-fetchに記載されている)に変更された場合に発生します。サービスワーカーでは、200
応答が最初にサーバーによって送信された(ユーザーが更新する必要がある)か、キャッシュによって送信されたか、サーバーが最初に304
(最新のもの)で応答したかどうかを調べることはできませんバージョンは既にロードされています)。
if-modified-since
ヘッダが設定され、サーバが見つけるためにチャンスを持っていないされていないことを意味し、no-cache
に設定されますが、要求がサーバーに送信されたときに、これはまた、HTTPキャッシュをバイパスすることができますcache-mode flagがありますクライアントのバージョンです。また、このフラグは、今夜は夜間にはFirefoxでのみサポートされています。
サーバーが200
と応答すると、x-was-modified
のようなカスタムHTTPヘッダーを設定することをお勧めします。このカスタムヘッダーはサービスワーカーでアクセスすることができ、リソースが更新されたかどうかを確認するために使用できます。たとえHTTPキャッシュが200
のステータスを304
に置き換えたとしてもです。
x-if-modified-since
/x-last-modified
ヘッダーを使用し、indexedDBを使用してクライアントに情報を保存し、それを各要求に追加する必要がありますか?fetch()
は、最新のバージョンがキャッシュにある場合、200
のコードを304
に置き換えるのはなぜですか?
"レスポンスのLast-ModifiedヘッダーをIf-Modified-Since_で送信したものと単純に比較します。ただし、リクエストがhttpの前にサービスワーカーにヒットしたのでサービスワーカーでは' -f-modified-since'にアクセスできません-cache(リクエストにこのヘッダーを追加します) –
@SvenKeinath "または最後に見たものは「Last-Modified」です。つまり、あなたのサービスワーカーのキャッシュがあるところの 'Last-Modified'の値を覚えておいてください。 –
たとえば、 'Las Modified'値をindexedDBに格納しますか? –