IIS7以降でURLクエリ文字列が長いと404エラー
IIS7以降では、URLクエリ文字列が2,048バイト以上の場合、既定で拒否され404エラーとなります。
404は「not found」という自分の先入観があり、「ん?」となったのでメモメモ。
この制約をはずすには、アプリケーションのweb.configに下記を追記します。
<system.webServer> <security> <requestFiltering> <requestLimits maxQueryString="新しい値をバイト単位で指定" /> </requestFiltering> </security> </system.webServer>
ちなみにIIS7.0以降では、404の原因は下記の種類があるようです。
404.0 - ファイルまたはディレクトリが見つかりません。 404.1 - サイトが見つかりません。 404.2 - ISAPI または CGI の制限。 404.3 - MIME の種類の制限。 404.4 - ハンドラーが構成されていません。 404.5 - 要求フィルター構成により拒否されました。 404.6 - 動詞が拒否されました。 404.7 - ファイル拡張子が拒否されました。 404.8 - 非表示の名前空間。 404.9 - ファイル属性が非表示にされています。 404.10 - 要求ヘッダーが長すぎます。 404.11 - 要求にダブル エスケープ シーケンスが含まれています。 404.12 - 要求にハイビット文字が含まれています。 404.13 - コンテンツの長さが長すぎます。 404.14 - 要求の URL が長すぎます。 404.15 - クエリ文字列が長すぎます。 404.16 - DAV 要求が静的ファイル ハンドラーに送信されました。 404.17 - 動的コンテンツが、ワイルドカード MIME マッピングで静的ファイル ハンドラーにマップされました。 404.18 - クエリ文字列シーケンスが拒否されました。 404.19 - フィルタリング規則により拒否されました。 404.20 - URL セグメントが多すぎます。
上記の404.のあとの数字はサブステータスコードです。
IISログにはサブステータスコードも出力されるので、そちらを参照すると一発で原因がわかります。
404でもいろいろ原因がありますので、気を付けましょう、、自分が、、
[参考]
IIS 7 での ASP.NET 2.0 の互換性に影響する変更点
こちらにIISでのURLクエリ文字列が2,048バイト以上の制約が記載されています。
The HTTP status code in IIS 7.0, IIS 7.5, and IIS 8.0
こちらにIISのステータスコードの一覧が有ります。