web-dev-qa-db-ja.com

IIS大きなファイルをアップロードしてTLSを使用するとランダムに413 Request Entity Too Largeを返す

IISでISAPIアプリケーションを実行しています。これは、あらゆるサイズのファイルのアップロードをサポートすることを目的としています。 1つのサーバーで、HTTPSを使用すると、アップロードが413 Request Entity Too Largeまたはタイムアウトでランダムに失敗するように見えますが、唯一の解決策は、uploadReadAheadSizeをアップロードしたファイルより大きい値に設定することです。ただし、これにより、アップロードされたファイルのサイズが2GB(uploadReadAheadSizeの最大値)に制限され、許容できなくなります。

  • Windows Server 2012(および対応するIISバージョン)
  • サーバーはクライアント証明書を必要としません(しかし、クライアントはおそらく-予期せず-それらを送信しましたか?!)
  • 同じアプリケーションがインストールされていて、uploadReadAheadSizeがデフォルト(49152バイト)に設定されている他のサーバー(およびサーバーが多数ある)では、問題は発生しません。
  • エラーはIISによって返され、WAFまたは同様の中間コンポーネントは関与していません。
  • このエラーは、サーバーホスト自体を含む任意のホストから送信するときに発生します。
  • このエラーは、ブラウザークライアントとシッククライアント(ネイティブのWindowsアプリケーション)を使用してアップロードするときに発生します。
  • リクエストの本文を短くすると、実際にはエラーが発生しなくなります。
  • 同じリクエストが失敗または成功する可能性があります(例:Fiddlerで再生した場合)

これを引き起こしている可能性のあるものは何ですか?これをデバッグするにはどうすればよいですか?

(注:StackOverflowとここで同様の質問をいくつか見ましたが、これらのシナリオでは、クライアント証明書が使用されることを意図しているか、アプリケーションがWCFに基づいています-私たちのものではありません-または、問題はuploadReadAheadSizeに依存していませんでしたまたはTLS)

また、uploadReadAheadSizeが実際に何をしているのか、「内部で」何が起こっているのかを理解するための良い情報源は何ですか? Microsoftの公式ドキュメントはかなりまばらです。

2
Florian Winter

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.configserverRuntimeDenyからAllowに次のように切り替えます。

<section name="serverRuntime" overrideModeDefault="Allow" />

次に、Web.configを次の値で編集します。

<system.webServer>
  <serverRuntime uploadReadAheadSize="10485760" />
...
1
Ogglas