2016-04-15 9 views
1

私はIE11とSpring Boot(1.3.3)で奇妙な問題があります。 IE11で互換モードが有効になっていると、エラーページが正しく表示されません。ダウンロードウィンドウがブラウザに表示されます。IE11互換モードが壊れます。春のWhitelabelエラーページ

春ツール・スイート:

  • は、新たな "春のスタータープロジェクト"
  • 使用デフォルト名
  • 使用依存関係の "Web" を作成します。ここ

    は、エラーを再現する方法です

  • フィニッシュ
  • スプリングブートアプリケーションを開始する

のInternet Explorer 11:

  • をクリックし、 "ツール・シンボル"
  • "互換表示設定"
  • "localhost" を閉じる
  • とき

  • を追加します。あなたは "localhost:8080"を開くと、ブラウザはすぐには動作しませんもう春のWhitelabelエラーです。それは "localhost"から "8080"をダウンロードするように頼みます。

    :-(何ナンセンス私は、問題はこのバグに関連していると思う:https://github.com/spring-projects/spring-boot/issues/3633 しかし、ここでユーザーが取得、少なくともデフォルトIE 404エラー

    残念ながら、私は、「ディスプレイのイントラネットなどの互換モードを使用する必要があります。互換性ビューのサイトは当社のブラウザのデフォルト設定です... この問題を回避するにはどうすればいいですか?

    PS:カスタムエラーページにも設定してみました。いずれか。

  • 答えて

    0

    IE Accept: Content-Types値の異なるリストを、HTTPリクエストヘッダフィールドを介して、例えば、クロムはそうです。あなたが記述した奇妙なダウンロード動作を再現することはできませんでしたが、異なるブラウザを使用して同じリクエストに対して異なる応答を得ました。

    IEを使用して私はContent-Type: application/json応答 を受け取り、クロムを使ってContent-Type: text/htmlの応答でした。

    ホワイトベラのエラーページでは、Content-Typeがどのようなものになるかをサーバーに伝えなければなりません。トリックを行う必要があります

    @Controller 
    public class YourCustomController implements ErrorController{ 
    
        private static final String PATH = "/error"; 
    
        @RequestMapping(value = PATH, produces={"text/html"}) 
        public String error() { 
         return "error"; 
        } 
    
        @Override 
        public String getErrorPath() { 
         return PATH; 
        } 
    } 
    

    :これは、このような春ブーツのデフォルトErrorControllerをオーバーライドすることで行うことができます。新しいエラーコントローラContent-Typeの代わりにContent-Type: text/htmlを生成すると、ブラウザがダウンロードされたようです。

    どのテンプレートエンジンを使用するか(MVCアプローチを使用する場合)によっては、(application properties appendix of the spring boot documentationで説明)の設定パラメータに注意してください。

    +0

    ありがとうございました。それは多かれ少なかれ動作します;-)。残念ながら、1つの欠点があります:アプリケーションの一部をREST-APIとして公開しています。ここでは、content-type application/json =>というエラーが欲しいです。このデフォルトの動作は残念ながら上記の方法で上書きされます。それにもかかわらず、私は最初の問題の実行可能な回避策であるため、この回答を受け入れたものとしてマークします。 – JanTheGun

    +0

    ここにはうれしいですが、それはあなたのために多かれ少なかれ動作する哀れみ。欠点を回避するためには、あなたのRESTコントローラ内から 'YourCustomException'を投げて、@ExceptionHandler({YourCustomException.class})アノテーションを介して別々の' @ControllerAdvice'で独自の例外タイプを処理させることが考えられます。 ExceptionHandlerメソッドは@ResponseBody YourCustomException'で応答して、JSON形式の回答を作成することができます。コード例が必要な場合はお知らせください。 – mika

    関連する問題