ゆれくるコール開発日誌

ゆれくるコール、あめふるコール、つながるコールや緊急地震速報のことなど

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ステータスコードの一覧が有ります。