こう 聞かれます
- 「ブラウザの
キャッシュとは 何ですか。 どう 制御しますか」 - 「
no-cacheとno-storeの違いを 説明してください」 - 「サイトを
更新したのに、 利用者の 画面が 古いままでした。 なぜで、 どう 防ぎますか」 (困った 場面から聞く形)
面接官が 見ている点
- キャッシュを
「速くなる物」だけでなく、 「古い物を見せる危うさ」と 組で語れるか - 決めるのは
サーバーの 応答の ヘッダーだ、 と分かっているか - 長く
持たせる 物と、 毎回確かめる 物を 分ける 設計ができるか
短い答え
- ブラウザの
キャッシュは、 一度受け取った ファイルを 手元に 取って おき、 次に 同じ物が 要る とき通信を 省く 仕組みです。 - どれだけ
使って よいかは、 サーバーが Cache-Controlのヘッダーで 決めます。 no-cacheは毎回確かめてから 使う、 no-storeは保存しない、という 意味です。 - 気を
つけるのは 更新が 届かない ことで、 HTML は 毎回確かめ、 CSS や JavaScript は ファイル名に 版を 付けて 長く 持たせます。
少し 詳しい答え
新しい うちは そのまま使う
Cache-Control: max-age=3600 が
古くなったら 確かめる (ETag と 304)
サーバーはETag で
GET /index.html HTTP/1.1
If-None-Match: "v42"中身が
HTTP/1.1 304 Not Modified
ETag: "v42"ブラウザは
no-cache と no-store
- no-cache 保存して
よいが、 使う 前に 毎回サーバーに 確かめる。 名前に 反して 「保存しない」では ありません - no-store そも
そも 保存しない。 個人の 情報を 含む 画面など、 手元に 残したくない 物に使います
ファイル名に 版を付ける
CSS や JavaScript は app.3f9a1c.js のように、no-cache に
作った
よく ある間違い
- 「no-cache は
キャッシュしない」と言う 保存は します。 使う 前に 確かめる、という 意味です。 保存させないのは no-store です - HTML まで
長く持たせる 新しい CSS や JavaScript の 名前を 書いた HTML が 届かず、 更新が 反映されません - ログイン後の
画面を 共有の キャッシュに載せる CDN などに 載ると、 別の 人に 個人の 画面が 届く おそれが あります。 privateかno-storeを付けます
深掘りの問い
- 「304 が
返ったのに、 ブラウザが 手元の 物を 失っていたら」 304 には 本文が 無いので、 もう 一度 ふつうに 取り直す必要が ある、と答えます - 「ブラウザの
キャッシュと CDN の キャッシュは 何が 違いますか」 ブラウザは 1 人だけの ため、 CDN は 多くの 人で 分け合う 置き場です。 だから 個人の 物は CDN に 置かない、とつなげます - 「新しい
ファイルを 出すとき、 古い版の ファイルは すぐ消して よいですか」 開いたままの 画面や 古い HTML が 古い 名前を 頼むので、 しばらく 残す、と答えます