187
  • 「304 Not Modified」応答はどのように生成されますか?

  • ブラウザは HTTP リクエストへの応答が 304 かどうかをどのように判断しますか?

  • ブラウザによって設定されるか、サーバーから送信されますか?

  • サーバーから送信された場合、サーバーはキャッシュで利用可能なデータをどのように認識し、どのように 304 を画像に設定しますか?

私の推測では、ブラウザによって生成された場合:

function is_modified()
{
    return get_data_from_cache() === get_data_from_url();
}

function get_data_from_cache()
{
    return some_hash_or_xxx_function(cache_data);
}

function get_data_from_url()
{
     return some_hash_or_xxx_function(new_data);
}

function some_hash_or_xxx_function(data)
{
     // Do something with the data.
     // What is that algorithm?
     return result;
}

console.log(is_modified());

データを取得し、解析してデータベースにプッシュするために、サードパーティの API プロバイダーに依存しています。データはリクエストごとに変更される場合と変更されない場合がありますが、ヘッダーは常に200. 解析したり、DB の最後の一意の ID をチェックしたりしたくありません...データの変更を判断したり、結果を直接比較したり、結果md5()sha1()ハッシュcrc32()して正常に動作したりしたくありませんが、決定するアルゴリズム304

同じ種類のアルゴリズムを使用して、データの変化を判断したいと考えています。

4

2 に答える 2

210

ブラウザーが何かをキャッシュに入れると、サーバーからのLast-ModifiedorETagヘッダーも保存されます。

次に、ブラウザーはIf-Modified-SinceorIf-None-Matchヘッダーを含む要求を送信し、コンテンツにまだその日付または ETag がある場合は 304 を送信するようにサーバーに指示します。

サーバーには、各リソースの各バージョンの更新日または ETag を計算する何らかの方法が必要です。これは通常、ファイルシステムまたは別のデータベース列から取得されます。

于 2014-01-07T17:41:37.020 に答える