POST 要求に応答して大きなボディを返す HTTP サーバーがあります (これは SOAP サーバーです)。これらのボディは、チャンクによって「ストリーミング」されます。応答のストリーミング中にエラーが発生した場合、そのエラーをクライアントに報告し、接続を開いたままにするにはどうすればよいですか? 実装は独自の HTTP/SOAP スタックを使用するため、HTTP プロトコル レベルでの回答に関心があります。
3 に答える
また、チャンクされた応答には、 HTTP ヘッダーと同様の「フッター」を含めることができることに注意してください。失敗した後、次のようなフッターを送信できます。
X-RealStatus: 500 悪いことが起こった
または、成功した場合:
X-RealStatus: 200 OK
サーバーがステータス行 (応答の最初の行) をクライアントに送信すると、応答のステータス コードを変更することはできなくなります。多くのサーバーは、バッファーがいっぱいになるまで応答を内部的にバッファーすることにより、応答の送信を遅らせます。バッファーがいっぱいになっている間でも、応答について考えを変えることができます。
クライアントが応答ヘッダーにアクセスできる場合は、チャンク エンコードにより、サーバーがチャンク エンコードされた本文の後にヘッダー付きのトレーラーを追加できるという事実を利用できます。そのため、エラーが発生したサーバーは、本文の送信を適切に停止し、ヘッダーに値を設定するトレーラーを送信できます。クライアントは、このヘッダーの存在をエラーが発生した兆候として解釈します。
response.iscommitted() が false を返す限り、ステータス コードを変更できます。(Java の HttpServletResponse を参照してください。他の言語にも同等のものが存在すると確信しています)