js や css ファイルを修正して, ブラウザで試すときに,
ブラウザにキャッシュされてしまっており修正が反映されないことがままあります.
私はこれでハマりました.
それで, そのファイルだけキャッシュさせなくしたい.
そのための方法を, C#(ASP.NET)版と 生のhtmlに JavaScript を埋め込む版 の2つ描きました.
C#(ASP.NET)版
これを
<!-- 修正中のjsファイル --> <script src="/scripts/test.js"></script>
こうじゃ!
<!-- 修正中のjsファイル --> <script src="/scripts/test.js?timestamp=@DateTime.Now.Ticks.ToString()"></script>
こうするとhtmlでは
<script src="/scripts/test.js?timestamp=635514023162619619"></script>
などとなり, 次のアクセスでは違うURIなので, 結果的にキャッシュにヒットしなくなるわけです.
(@DateTime.Now.Ticks.ToString() ってのを書いたので, タイトルに ASP.NET, C#と特別に環境を書きました)
JavaScript では
生のhtmlでも同じことをやろうとすると, 以下のJSを埋め込むことになります. (jQuery)
// タイムスタンプクエリをつける動作 $(function() { var script = document.createElement('script'); script.src = 'js/main.js?' + (new Date).getTime(); document.body.appendChild(script); });
埋め込んだ後はこうなります
<!-- test.js をキャッシュさせなくする --> <script src="https://code.jquery.com/jquery-2.1.3.min.js"></script> <script> // タイムスタンプクエリをつける動作 $(function() { var script = document.createElement('script'); script.src = 'scripts/test.js?' + (new Date).getTime(); document.body.appendChild(script); }); </script>
公開後の追記
@chomado もうちょい突っ込むと、この手法は HTTP GET flood 攻撃に用いられるもので、攻撃側がランダムな文字列のqueryを付加して大量にアクセスすることで、受け側が単純なURIフィルターだけでは防御しきれなくなるというもの。
— HODA (@_HODA) 2014, 11月 12
なるほど〜!φ(*゚▽゚*)oメモメモ
『HTTP GET flood 攻撃』でググったら, DoS攻撃の一種みたい!
なるほどなあ
@chomado この攻撃は、サービスとして一番外側のリバースプロキシーにコンテンツをキャッシュして大量アクセスを捌く設計なのに、ランダムqueryによってキャッシュが効かなくて内部のserverの負荷が上がってしまう状態。こういうのを面白いと思う感覚は、伸びる素質あるねw
— HODA (@_HODA) 2014, 11月 12
なるほど!あったまいいーっ!
私もこれを教えていただいた時は感動しました!(((o(*゚▽゚*)o)))