1

Response.Flush()ページの途中で呼び出して、ページをチャンクでクライアントに送信しています。これは、ブラウザーが html の最初の部分を取得し、サーバーが残りの要求を処理している間にリソースのダウンロードを開始できるようにするためです。

IIS サーバーとクライアントの間の特定のサード パーティ サービス (CDN、ファイアウォール、負荷分散など) のTransfer-Encoding: Chunkedため、ヘッダーを設定して、応答がチャンクで返されることを認識できるようにする必要があります。

呼び出してヘッダーを設定してみます:Response.Headers.Add("Transfer-Encoding", "chunked");

何らかの理由でこれを行うと、IIS サーバーに直接接続しても、すべてのサードパーティを経由せずに、かなり長い間待機した後に空白のページが返されます。プロセスにアタッチしてデバッグしても、エラーは表示されません。
「Transfer-Encoding」ヘッダーを削除すると機能しますが、使用している一部のサードパーティにはこのヘッダーが必要です。

Webアプリケーションでこのヘッダーを設定する方法を知っている人はいますか??

ところで-IISの「応答ヘッダー」セクションでこのヘッダーを直接設定しようとしましたが、これを行っても応答はまだ空です。

4

2 に答える 2

1

ウィキペディアの説明によると、Chunked Transfer Encoding では、応答本文を特定の方法でエンコードする必要があります。説明されている形式の主なポイントの 1 つは次のとおりです。

各チャンクは、埋め込まれたデータのオクテット数で始まり、ASCII の 16 進数として表現され、その後にオプションのパラメーター (チャンク拡張) と終了 CRLF シーケンスが続き、その後にチャンク データが続きます。チャンクは CRLF で終了します。チャンク拡張が提供されている場合、チャンク サイズはセミコロンで終了し、その後に拡張名とオプションの等号と値が続きます。

私の知る限り、呼び出しResponse.Flush()はこの特定のマークアップを生成しません。クライアントへのバッファリングされた応答コンテンツを空にするだけです。

「サーバーがチャンク転送エンコーディングを使用するのはいつですか?」を参照してください。この回答で: https://stackoverflow.com/a/2711405/1236044

正しい設定があれば、IIS は必要に応じて Chunked Transfer Encoding に自動的に切り替える必要があることを暗示しているようです。

于 2013-08-27T12:00:15.420 に答える