IIS にポスト可能なリクエストサイズを調整する方法
ファイルアップロード時のエラー
IIS では特にファイルのアップロードなどを行った場合に、次のようなエラーが表示される場合があります。
Maximum request length exceeded
このとき HTTP ステータスは 500 (Server Internal Error) です。
似たエラーで、次のようなエラーもあります。
HTTP Error 413.1 - Request Entity Too Large
これらのエラーはなせ発生するのでしょうか。
エラーの種類と設定箇所
IIS (及び ASP.NET) には POST 可能なデータサイズが設定されています。
ひとつは ASP.NET アプリケーションとして、リクエストを処理するかどうか決めるデータサイズ制限です。
もうひとつは、ウェブサーバーとして、IIS が不正なリクエストとして処理を行うかどうか決める制限です。 リクエストフィルタリングモジュールがセキュリティ強化の一環として設定するものです。
ASP.NET の設定でリクエストサイズ超過が検出された場合は、次のようなエラーになります。
Maximum request length exceeded (HTTP Status 500)
このエラーは ASP.NET が発生させるエラーで、次の設定によるものです。
<configuration> <system.web> <httpRuntime maxRequestLength="4096" /> </system.web> </configuration>
4096 がデフォルト値です。これは 4096 kb つまり 4MB のデータを制限値としていることになります。
一方、IIS のリクエストフィルタリングの設定でサイズ超過が検出された場合は、次のようなエラーになります。
HTTP Error 413.1 - Request Entity Too Large
これは IIS の設定の次の箇所の設定値よりも POST データサイズが大きい場合に発生します。
<configuration> <system.webServer> <security> <requestFiltering> <requestLimits maxAllowedContentLength="30000000"/> </requestFiltering> </security> </system.webServer> </configuration>
30000000 はデフォルト値です。 これは 30000000 byte を表しており、およそ 28.6MB です。
ASP.NET の方はキロバイト単位で値を設定しますが、こちらはバイト単位で設定します。
リクエストフィルタリングの方はリクエストボディの長さ (Content-Length) だけでなく、そのほかにも、URL のクエリストリングなどの制限も設定可能です。
以上、IIS / ASP.NET のアプリケーションにファイルをアップロードした時に、ファイルサイズが大きいことによって発生するエラーを二種類挙げ、 それらの設定値を紹介しました。