理系学生日記

おまえはいつまで学生気分なのか

IE/Edgeがフレンドリなエラーページ(簡易表示/Friendly HTTP Error Pages)を勝手に表示してくる問題

古くは IE、新しくは Edge で、このような画面が表示されるのをご覧になった方も多いと思います。

これ、IE/Edge が、"親切心で" "気を利かせて" "ユーザに対して何が起こったのか分かるように" 表示してくれるコンテンツでして、日本語でいうと"簡易表示"というそっけない名前なのですが、英語の名称だと "Friendly HTTP Error Pages" で、いかに MS がユーザフレンドリな企業であるかを象徴するものでしょう。

この振舞いのせいでッ!! せっかくカスタマイズしたページがッ!!!! 表示されないんやけどッ!!!!!!

そういう Web 管理者様も多いと思います。この簡易表示のページを表示するか否かは、IE のクライアント側の設定、サーバ側の対処の双方で対応することができるので、そういう対応を取れば良いでしょう。

クライアント側の設定で OFF にする

クライアント側の設定で簡易表示を OFF にするためには、以下のページを参照すること。 IE の設定で [ツール]-[インターネット オプション]-[詳細設定]-[HTTP エラーメッセージを簡易表示する] のチェックボックスを OFF にすれば良い

サーバ側の設定で OFF にする

まず前提ですが、IE が簡易表示を行うロジックは極めて単純で、サーバから返却される HTTP BODY の流さが閾値を下回っていた場合は簡易表示を行うということになっています。この背景は、MS が「クソみたいなエラーページを返したらユーザは何が起こったのか分からんから、うちの方で良さげなエラーページを表示しちゃるかのう」と考えている結果であり、この「クソみたいなページ」というのを HTTP BODY の流さで判断しているということになります。 なので、サーバ側としては、この BODY の長さを増やしてしまえば良い。 どこまで増やせば良いかですが、この閾値はレジストリに保存されています。閾値は HTTP ステータスコード毎に定義されているのが面倒ですが。

2010 年の情報だと、 - 256 Byte: HTTP ステータス 403, 405, 410 - 512 Byte: HTTP ステータス 400, 404, 406, 408, 409, 500, 501, 505 - その他: 512 Byte となっているようです。

The byte length thresholds are stored in the registry in HKEY_LOCAL_MACHINE under the subkey \SOFTWARE\Microsoft\Internet Explorer\Main\ErrorThresholds. The default threshold is 256 bytes for the response codes [403, 405, 410] and 512 bytes for response codes [400, 404, 406, 408, 409, 500, 501, 505]. If the registry entry is missing for one of the status codes, its threshold defaults to 512 bytes. Friendly HTTP Error Pages

上記エントリの情報ですが、Fiddler でも以下のようなパディングが行なわれているようなので、同じような対応をサーバ側でしてやれば良いんじゃないかと思います。事前に用意しといたエラーページにスペースを山ほど付与するとかでも。

if (iStatusCode >= 400) 
{ 
    if (strErrorBody.Length < 512) strErrorBody = strErrorBody.PadRight(512, ' ');
}