IISでISAPIアプリケーションを実行しています。これは、あらゆるサイズのファイルのアップロードをサポートすることを目的としています。 1つのサーバーで、HTTPSを使用すると、アップロードが413 Request Entity Too Large
またはタイムアウトでランダムに失敗するように見えますが、唯一の解決策は、uploadReadAheadSize
をアップロードしたファイルより大きい値に設定することです。ただし、これにより、アップロードされたファイルのサイズが2GB(uploadReadAheadSize
の最大値)に制限され、許容できなくなります。
uploadReadAheadSize
がデフォルト(49152バイト)に設定されている他のサーバー(およびサーバーが多数ある)では、問題は発生しません。これを引き起こしている可能性のあるものは何ですか?これをデバッグするにはどうすればよいですか?
(注:StackOverflowとここで同様の質問をいくつか見ましたが、これらのシナリオでは、クライアント証明書が使用されることを意図しているか、アプリケーションがWCFに基づいています-私たちのものではありません-または、問題はuploadReadAheadSize
に依存していませんでしたまたはTLS)
また、uploadReadAheadSize
が実際に何をしているのか、「内部で」何が起こっているのかを理解するための良い情報源は何ですか? Microsoftの公式ドキュメントはかなりまばらです。
IIS Express with Visual Studio 2017で同様のエラーが発生し、実際にはuploadReadAheadSize
でした。
エラー:
HTTPエラー413.0-要求エンティティが大きすぎます
リクエストエンティティが大きすぎるため、ページは表示されませんでした。
最も考えられる原因:
要求エンティティが大きすぎるため、Webサーバーは要求の処理を拒否しています。
Webサーバーはクライアント証明書をネゴシエートしようとしているが、要求エンティティが大きすぎるため、要求を処理できません。
リクエストURLまたはURLへの物理マッピング(URLのコンテンツへの物理ファイルシステムパス)が長すぎます。
あなたが試すことができるもの:
リクエストが有効であることを確認してください。
クライアント証明書を使用している場合は、以下を試してください。
System.webServer/serverRuntime@uploadReadAheadSizeを増やす
最初のSSLハンドシェイクの一部としてクライアント証明書をネゴシエートするようにSSLエンドポイントを構成します。 (netsh http add sslcert ... clientcertnegotiation = enable).vs\config\applicationhost.config
ここにソリューションを追加しましたが、同じプリンシパルを実際のIIS=にも使用できます。編集\.vs\config\applicationhost.config
。serverRuntime
をDeny
からAllow
に次のように切り替えます。
<section name="serverRuntime" overrideModeDefault="Allow" />
次に、Web.config
を次の値で編集します。
<system.webServer>
<serverRuntime uploadReadAheadSize="10485760" />
...