リダイレクト時のブラウザキャッシュ

2012 年 9 月 23 日

サーバの設定でURLをリダイレクトすることがよくある。Apacheでいえば、httpd.confや.htaccessでRedirectやRewriteRuleを使う場合。

このとき、ステータスコードを301にして恒久的なリダイレクトにした場合、設定を間違えていると厄介なことになる。

最近のブラウザはリダイレクト情報も積極的にキャッシュしてパフォーマンスを向上させようとするため、サーバ側のリダイレクト設定を変更しても、そのキャッシュのせいで反映されなくなってしまう。

対応としては、ユーザーサイドがブラウザのキャッシュを手動でクリアするしかなく、一度こうなってしまうとサーバの運営者側からできることはほとんどない。

非リダイレクトの固定ページとは異なり、ブラウザのスーパーリロードは使えない(間違ったURLへすぐリダイレクトされてしまうため)。

開発者サイドの対策

1. 開発時はステータスコードを302、307(一時的なリダイレクト)にする

ただし、これでもブラウザによってはキャッシュしてしまうことがあるらしい。

2. ヘッダ情報にキャッシュさせないようにno-cacheをつける

Apacheの場合

<DirectoryMatch "^/sample/">
	Header set Pragma no-cache
	Header set Cache-Control no-cache
</DirectoryMatch>

PHPの場合

header('Pragma: no-cache');
header('Cache-Control: no-cache');

ITサーバ

Posted by takasho