0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

サーバが明示的にキャッシュの有効期限を決めてないときにどうなるか[Heuristic freshness checking]

Last updated at Posted at 2020-12-23

#本題
サーバ側でキャッシュの有効期限を決めていない場合は以下のような計算で有効期限が決められるようです。

freshnessLifetime = (Date - Last-Modified) / 10

つまり、サーバ上の最後の更新(Last-Modified)から時間が経てば経つほど有効期限が伸びていきます。

参考: https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching#Heuristic_freshness_checking

##調べるに至った背景
最近、リリースしたシステムで「やっぱりここ直して」系の改修を担当したのですが、
キャッシュが残って変更が反映されないので各端末のブラウザのキャッシュクリアをしないといけなかったんです。
このシステムは結構前からやっているはずなのにキャッシュについてあんまり考えている風ではなかったですね。
おそらくjsファイルはjQueryの仕様なのか知りませんがCache-Bustingされていて※1、
HTMLファイルを編集することがあまりないので気が付く人がいなかったというところでしょうか。
そんなこんなで、なぜHTMLがキャッシュされるのか調べました。
まぁキャッシュされるのは当然で、jsがキャッシュされないのが特殊だったのですが、、

##学んだこと
キャッシュクリアするの面倒なので、有効期限決めた方が良いのではということですね。
私が携わっていたシステムはIISを使っていました。→HTTP応答ヘッダで簡単に決めれそうです。
HTMLファイルの表記揺れくらいなら1日後に更新とかじゃダメなんですかね。。
##補足
※1
jQuery2.x以下で以下の例のようにscriptタグをappendするとcache-bustingされるっぽいです。
キャッシュされたファイルを確認すると script.js?_=ランダム数 のようになっています。
jQuery3.xでは起こりませんでした。さらに高まる不信感、、

$("head").append('<script src="./script.js"><\/script>');
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?