質問するログイン新規登録

回答編集履歴

2

キャッシュ制御例の改訂

2019/12/09 08:52

投稿

AkitoshiManabe
AkitoshiManabe

スコア5434

answer CHANGED
@@ -7,13 +7,16 @@
7
7
  **ETag** の例をざっくり書くと、こんな感じです。
8
8
  1. ブラウザからサーバーへの(初回)要求。
9
9
  2. サーバーは、応答ヘッダ ``ETag: "token"`` を含めて``200 OK``を応答。
10
+ (ブラウザは応答内容をトークンを含めて覚える:キャッシュする)
10
11
  3. ブラウザからサーバーへの(2回目以降の)要求するとき、
11
12
  以前、知った``"token"``を 要求ヘッダ ``If-None-Match: "token"`` に含めて要求
12
13
  (「__もし、違っていたら更新情報を応答して!以前のは覚えてる__」という意味) 。
13
- 3. サーバーは、``"token"`` から、2回以上アクセスしてきたブラウザだと判断して新旧を比較。
14
+ 4. サーバーは、``"token"`` から、2回以上アクセスしてきたブラウザだと判断して新旧を比較。
14
15
  内容が変わってないなら、エラー ``304 Not Modified``(覚えているのを使ってね)を応答。
15
- 変わっていると、応答ヘッダに ``ETag: "token2"`` (新しいトークン)を含め、更新内容 を``200 OK``で応答。
16
+ 変わっていると、2.と同様に応答ヘッダに ``ETag: "token2"`` (新しいトークン)を含め、更新内容 を``200 OK``で応答。(ブラウザは応答内容を新しいトークンを含めて覚えなおす:キャッシュ更新する)
16
17
 
18
+ これの繰り返しになります。
19
+
17
20
  ----
18
21
  > ものすごくサーバーに負荷がかかってしまいます
19
22
 
@@ -23,4 +26,7 @@
23
26
  閲覧者にとっても、5秒後にスクロールがリセットされてしまうページになっています。
24
27
 
25
28
  追記)
26
- サーバー側プログラムを弄るときに「キャッシュ制御という方法がある」と覚えておけばいいと思います。
29
+ サーバー側プログラムを弄るときに「キャッシュ制御という方法がある」と覚えておけばいいと思います。
30
+
31
+ ブラウザ側だけで実装する仕様は無くはないのです(アプリケーションキャッシュ)。
32
+ が、仕様もWD(作業草案)のまま放置され、実装されている内容は、キャッシュの削除が厄介で、とても「安全」とは言えない状態です。このため、ブラウザ側だけで**安全に更新状態を判断する手段は無い**と考えてください。

1

誤字の修正と追記

2019/12/09 08:52

投稿

AkitoshiManabe
AkitoshiManabe

スコア5434

answer CHANGED
@@ -10,7 +10,7 @@
10
10
  3. ブラウザからサーバーへの(2回目以降の)要求するとき、
11
11
  以前、知った``"token"``を 要求ヘッダ ``If-None-Match: "token"`` に含めて要求
12
12
  (「__もし、違っていたら更新情報を応答して!以前のは覚えてる__」という意味) 。
13
- 3. サーバーは、``"token"`` から、2回以上アクセスしてきたブラウザだと判断して新旧を比較。
13
+ 3. サーバーは、``"token"`` から、2回以上アクセスしてきたブラウザだと判断して新旧を比較。
14
14
  内容が変わってないなら、エラー ``304 Not Modified``(覚えているのを使ってね)を応答。
15
15
  変わっていると、応答ヘッダに ``ETag: "token2"`` (新しいトークン)を含め、更新内容 を``200 OK``で応答。
16
16
 
@@ -20,4 +20,7 @@
20
20
  当然です。
21
21
 
22
22
  示されたコードは、5秒毎に強制的に再リクエストする実装ですから。
23
- 閲覧者にとっても、5秒後にスクロールがリセットされてしまうページになっています。
23
+ 閲覧者にとっても、5秒後にスクロールがリセットされてしまうページになっています。
24
+
25
+ 追記)
26
+ サーバー側プログラムを弄るときに「キャッシュ制御という方法がある」と覚えておけばいいと思います。