質問: chromeブラウザ利用時にキャッシュを無効化し、常にサーバ通信を行いたいです。 プログラム上「cache-control」を利用し、下記ソースコードでキャッシュを制御を行いたいです。 ``` response.setHeader(“Cache-Control”, “no-cache,no-store,must-revalidate,max-age=0”); response.setHeader(“Pragma”, “no-cache”); ``` 結果としては成功しませんでした。 こちらの方法が間違ってるか、また別の方法があるかを教えていただけますでしょうか。
回答: キャッシュを無効化したい場合は、`Cache-Control`を`no-store`と設定するようにします。 `no-cache,no-store,must-revalidate,max-age=0`のように複数指定するのはよくないと思われます。 `Google Web Fundamentals`の「HTTP キャッシュ」のページでは次のように説明されています。 > > 「no-cache」は、同じ URL に対する後続のリクエストへのレスポンスとして、以前返されたレスポンスを使用するには、まずサーバーに問い合わせてレスポンスに変更があったかどうかを確認する必要があることを示します。そのため、適切な検証トークン(ETag)がある場合、no-cache を指定してもキャッシュされたレスポンスを検証するためのラウンドトリップは発生しますが、レスポンスに変更がなければダウンロードを省略できます。 > > > 一方、「no-store」はもっと単純です。返されたレスポンスのバージョンにかかわらず、ブラウザのキャッシュやすべての中間キャッシュはそのレスポンスを一切格納できません。たとえば、個人の機密データや銀行データが含まれているレスポンスなどです。ユーザーがこのアセットをリクエストするたびに、リクエストがサーバーに送信され、完全なレスポンスが毎回ダウンロードされます。 > > > (追記)参考 画面上の入力データが残るというのは、フォームのオートコンプリート機能のためです。詳しくはMDNの「フォームのオートコンプリートを無効にするには」を見てください。