#本題
サーバ側でキャッシュの有効期限を決めていない場合は以下のような計算で有効期限が決められるようです。
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>');