裏紙に書く程度の内容

hostsのキャッシュがクリアされない

開発をやっていてテストモード・実環境モードを切り替えるのにhostsを書き換えて実行、ということをやっていたのですが、うまく反映されないことがある。

ありがちなミスとしては hosts のタイポだったり、書換えたつもりが権限の云々により書き換わっていなかったりとか。

しかし、うまく切り替わってくれるときもあるのでそれは考えにくい。

環境

OS: Windows 7 Professional(64bit)
Chrome: 63.0.3239.132
Firefox Quantum: 58.0.1
IE: 11.0.9600.18860

アプリケーションの再起動

chromeにしろfirefoxにしろ、hostsファイル変更後、ブラウザ自体をいったん閉じて開きなおすと反映されていました。

しかし、ブラウザ終了しちゃうと開発時に参考にしていたサイトやらなにやらも閉じちゃうんで、開きっぱなしでどうにかならないもんかと調べてみました。

ipconfig を使う(NG)

> ipconfig /flushdns

結果、NG。やはりブラウザを再起動しないと反映されませんでした。

> nbtstat -R
> nbtstat -c

でも同じ結果。

ブラウザ再起動するなら flushdnsnbtstatやらなくてもきちんと反映されます。

chromeのキャッシュ削除

chrome://net-internals/#dns

で、clear host cacheボタンクリック後、

chrome://net-internals/#dns

flush socket poolsボタンでキャッシュクリア。

これならうまくいきました

参考: hostsファイルの変更をブラウザで即反映させる方法

firefoxキャッシュクリア

Firfoxでは。

通常のキャッシュクリアの方法ではNG。
うまくいく場合もあるけど、反映されない場合もある。

DNS プリフェッチ機能

の設定も試してみたが結果は同じ。

HostAdmin
というツールもあったが、Firefox Quantum とは互換性が無いということで使えず。

オフラインにしてからキャッシュクリア

いったんオフラインにしてからキャッシュをクリアし、再度オフラインを解除すると反映された。

Firefox: hosts を反映させる方法

IEの場合

これが一番やっかい。

というか結論を言うと、ブラウザをいったん閉じて開きなおすしかありません。

Chrome、Firefoxも同様なのですが、DNSキャッシュは各ブラウザ自身も保持しているようです。

Chrome、Firefoxはブラウザ閉じなくてもそのDNSキャッシュをクリアすることができましたが、IEはそれができない。

一応、レジストリをいじってキャッシュ時間を短く設定することができるようで、それも試してみましたがうまくいきませんでした。

結局、ブラウザ閉じる⇒開きなおす以外に方法はなさそう。
まあ、IEはあまり使わないから良いんですけど。

まとめ

Chrome/Firefox の場合はブラウザ閉じなくても hosts の設定を反映させることはできました。

が、非常にめんどくさい。

そんなんだったら「ブラウザ開きなおしたらOK。」と覚えておいたほうがよさそうですね。

Index