自分用のメモとして。
現象
ASP.NET Core MVCから、HttpClientを使って別のASP.NET Core APIとPOSTでHTTPS通信する際に次のエラーが起きた。
ファイルアップロードなどは行っておらず、1000個近いデータのリストをJSONでPOSTしている。
IIS 10.0 エラーの詳細 - 413.0 - Request Entity Too Large
主なポイント
- HttpClient使用
- HTTPS通信
- POST(JSON)
- ファイルアップロードはしていない
原因の分析
大量データの送信テスト中だったこともあり、エラー内容からも推察するに、この問題がリクエストデータ量が上限値を超えたことによって起きている可能性が高いと考え、いくつかの対策を実施して結果を見た。
結論
ApplicationHost.configに以下の設定をするとエラーが出なくなった。300kbが妥当かどうかは送信されるデータによる為、さらに検証が必要。
項目 | 値 |
---|---|
セクション | system.webServer/serverRuntime |
場所 | ApplicationHost.config |
maxRequestEntityAllowed | 307200 (300kb) (規定値=49152) |
uploadReadAheadSize | 307200 (300kb) (規定値=49152) |
変更しても変化がなかったプロパティ
maxRequestLength (×)
項目 | 値 |
---|---|
セクション | system.web/httpRuntime |
場所 | Web.config |
maxRequestLength | 規定値=4096 |
変更した結果 | 規定値から最大値に変更しても変化なし。そもそも4096はkb指定であり、4MBは十分な値 |
※そもそもこれはASP.NET(ASP.NET Coreではなく)の設定値だった。ASP.NET CoreではmaxAllowedContentLength
を設定する。未だにSP.NETとCoreの情報が入り乱れており、大変…。
maxAllowedContentLength (×)
項目 | 値 |
---|---|
セクション | system.webServer/security/requestFiltering |
場所 | Web.config |
requestLimits/maxAllowedContentLength | 規定値=30000000 |
変更した結果 | 規定値から最大値に変更しても変化なし。そもそも規定で30MB近くあり、十分な値 |
解説
プロパティ | 説明 |
---|---|
maxRequestEntityAllowed | IISの設定値で、リクエストのエンティティボディの最大バイト数を指定します。これは、HTTPリクエストヘッダーを含まないPOSTデータのサイズを制限するための設定です。 |
uploadReadAheadSize | IISの設定値で、HTTP.sysがクライアントから読み取る、SSL接続で送られるリクエストエンティティボディの最大バイト数を指定します。これは主にSSL接続でのファイルアップロードサイズを制御します。 |
maxRequestLength | ASP.NET(ASP.NET Coreではなく)のweb.config設定で、HTTPリクエストの最大長を指定します。この長さはキロバイト単位で指定されます。これは、アップロードされるファイルの最大サイズを制御するためのものです。 |
maxAllowedContentLength | IISの設定値で、リクエストのコンテンツ(ボディ)の最大バイト数を指定します。これはHTTPリクエスト全体(ヘッダーとボディを含む)の最大サイズを制御します。 |