IE11でサーバーにアクセスされないバグの犯人はキャッシュ

事象

javascriptのajaxからJavaServletへ命令を投げて、JavaServletが編集した内容をjavascriptに返却し、javascriptが画面更新する という一般的な処理を書いたのですが、IE11のときだけ思ったとおりに更新されません。

原因

具体的には、JavaServletが編集する前の内容で画面更新される動きになっていました。なぜだろうかとJavaServletをデバッグしてみると、JavaServletまで到達していないことが判明しました。

さらに踏み込んで調査していくと、JavaServletにアクセスされないのはIE11のキャッシュが原因であることが判明しました。信じられないのですが、そんな動きをしていました。以下に、解決方法を記載します。

解決方法

様々なやり方があるでしょうが、私が実施した方法はpreHandleをオーバーライドしてキャッシュクリアの処理を書くことです。

HttpRequestHandlerInterceptor.java
public class HttpRequestHandlerInterceptor extends HandlerInterceptorAdapter {

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {

    // キャッシュ制御(IE対応)
    response.setHeader("Cache-Control", "no-cache");

    return true;
  }
}

これで解決します。