[解決済み] 304 Not Modified」は具体的にどのように機能するのですか?
質問
-
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を計算する何らかの方法を必要とします。これは通常、ファイルシステムまたは別のデータベース・カラムから得られます。
関連
-
HTTPプロトコルの古典的な面接の質問と回答
-
[解決済み] HTTPファイルアップロードの仕組みを教えてください。
-
[解決済み】無効なデータに対するRESTレスポンスコード
-
[解決済み】URI、URL、URNの違いは何ですか?[重複] URIとURLとURNの違いは何ですか?
-
[解決済み】GETリクエストで同じパラメータ名で複数の値を渡す場合の正しい方法
-
[解決済み】http getリクエストにヘッダーを設定する方法は?
-
[解決済み】「Upgrade-Insecure-Requests」HTTPヘッダーとは何ですか?
-
[解決済み] HTTP GETリクエストにcontent-typeヘッダーは必要ですか?
-
[解決済み] 304 Not Modified」は具体的にどのように機能するのですか?
-
[解決済み] ブラウザがファイルのダウンロードを受信したことを検出する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] HTTPポストで文字+が%2Bに変換される
-
[解決済み] 404ヘッダー - HTTP 1.0か1.1か?
-
[解決済み] OPTIONSリクエストを送信する理由と、それを無効にする方法を教えてください。
-
[解決済み] HTTPリダイレクト:301(永久)と302(一時)の比較
-
[解決済み] ETagとヘッダーエクスパイアの比較
-
[解決済み] bash/shellスクリプトからhttp応答コードを評価する方法は?
-
[解決済み】ダイジェスト認証とベーシック認証の違いは何ですか?
-
[解決済み】HTTP 301と308のステータスコードの違いは何ですか?
-
[解決済み] HTTPヘッダーの設定
-
[解決済み] HTTPのPOSTメソッドをキャッシュすることは可能ですか?