やりたいこと
・Webサイトをデバッグするときとかにキャッシュを無効化したい
- css、html、jsを更新した時にキャッシュが有効だと厄介
- スマホのブラウザではキャッシュの消去がめんどくさい
- Cache-Control:no-cacheはわりとあてにならない
・リリース時にはキャッシュを有効化、かつ簡単に切り替えたい
- scriptタグのsrcにバージョンに相当するクエリーを埋め込むとかいう方法もあるけど、スクリプトを更新する度にhtmlも更新しないといけないのが面倒
- htmlを全部phpやcgiにして自動でバージョンを挿入するという方法はWebサーバのパフォーマンスが下がるので出来れば避けたい
参考
http://weboook.blog22.fc2.com/blog-entry-367.html
実現方法
・クエリーのついてないリクエストについては適当なクエリー(例えば時刻)をつけたURIにリダイレクトしてしまう
location (デバッグしたいURI) {
if ($is_args != "?") {
rewrite ^ $uri?v=$msec redirect;
}
}
この設定があるconfig(デバッグ用)とないconfig(リリース用)を用意しておけば、configを切り替えるだけで、キャッシュ有効、無効の切替が可能!
これでいいかと思いましたが。。
これだけやってもiframeはダメ
・Cache-Control:no-cacheは意味なし
・Safari、Chromeはキャッシュにヒットするとリクエストすら出さないのでリダイレクトまで行ってくれない
というわけで、iframeは今のところJavaScriptかphpでクエリーを足すしかなさそうです。。
$('#iframe').attr('src',url + '?' + Date.now());
こんな感じでどうでしょう。
今のところ
Mobile Safari
Google Chrome
Internet Explorer
で、ちゃんとサーバーから取りに行くことを確認しました。