3

POST 要求に応答して大きなボディを返す HTTP サーバーがあります (これは SOAP サーバーです)。これらのボディは、チャンクによって「ストリーミング」されます。応答のストリーミング中にエラーが発生した場合、そのエラーをクライアントに報告し、接続を開いたままにするにはどうすればよいですか? 実装は独自の HTTP/SOAP スタックを使用するため、HTTP プロトコル レベルでの回答に関心があります。

4

3 に答える 3

2

また、チャンクされた応答には、 HTTP ヘッダーと同様の「フッター」を含めることができることに注意してください。失敗した後、次のようなフッターを送信できます。

X-RealStatus: 500 悪いことが起こった

または、成功した場合:

X-RealStatus: 200 OK
于 2008-10-02T21:38:41.087 に答える
2

サーバーがステータス行 (応答の最初の行) をクライアントに送信すると、応答のステータス コードを変更することはできなくなります。多くのサーバーは、バッファーがいっぱいになるまで応答を内部的にバッファーすることにより、応答の送信を遅らせます。バッファーがいっぱいになっている間でも、応答について考えを変えることができます。

クライアントが応答ヘッダーにアクセスできる場合は、チャンク エンコードにより、サーバーがチャンク エンコードされた本文の後にヘッダー付きのトレーラーを追加できるという事実を利用できます。そのため、エラーが発生したサーバーは、本文の送信を適切に停止し、ヘッダーに値を設定するトレーラーを送信できます。クライアントは、このヘッダーの存在をエラーが発生した兆候として解釈します。

于 2008-10-02T21:27:28.727 に答える
0

response.iscommitted() が false を返す限り、ステータス コードを変更できます。(Java の HttpServletResponse を参照してください。他の言語にも同等のものが存在すると確信しています)

于 2008-10-02T21:33:46.153 に答える