1. ホーム
  2. http

[解決済み] 304 Not Modified」は具体的にどのように機能するのですか?

2022-04-15 16:05:37

質問

  • 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 .

同じようなアルゴリズムで、データの変化を判断したい。

どのように解決するのですか?

ブラウザがキャッシュに何かを保存するとき、そのキャッシュに含まれる Last-Modified または ETag ヘッダを送信します。

次にブラウザは、リクエストに If-Modified-Since または If-None-Match ヘッダがあり、コンテンツにその日付や ETag が残っている場合は 304 を送信するようサーバーに指示します。

サーバーは、各リソースの各バージョンについて、修正日またはETagを計算する何らかの方法を必要とします。これは通常、ファイルシステムまたは別のデータベース・カラムから得られます。