2013-06-20 10 views
6

Ich sende große Datenmenge in meiner Antwort an den Client in Chunked-Transfer-Encoding-Format.Antwort gesendet in Chunked-Transfer-Codierung und zeigt Fehler auf, nachdem einige Daten bereits gesendet wurden

Wie sollte ich mit irgendwelchen Fehlern umgehen, die auftreten Mitte während des Schreibens der Antwort?

Ich würde gerne wissen, ob es eine empfohlene HTTP-Spezifikation in Bezug auf diese für Clients gibt, um zu wissen, dass die Antwort in der Tat nicht erfolgreich ist, aber dass der Server auf ein Problem stieß.

Antwort

5

Sobald Sie mit dem Senden der HTTP-Header an den Client begonnen haben, können Sie nichts mehr senden. Sie müssen mit dem Senden der Antwort fertig sein, die Sie senden wollten, dh die Chunked-Daten und die zugehörigen Header. Wenn dazwischen ein Fehler auftritt, gibt es keine Möglichkeit, diesen Fehler dem Client mitzuteilen. Alles, was Sie tun können, ist die Verbindung zu schließen. Entweder empfängt der Client nicht alle Header oder er empfängt am Ende der Antwort nicht den abschließenden Block mit der Länge 0. In jedem Fall ist es ausreichend, dass der Client weiß, dass beim Senden ein Fehler aufgetreten ist.

+0

Danke Remy. Ja ... richtig, ich bin mir bewusst, dass Header zuerst gesendet werden und es keine Möglichkeit gibt, sie zu ändern, sobald wir anfangen, in den Stream zu schreiben. Wie Sie vorgeschlagen haben, schließe ich derzeit die Verbindung, wollte aber wissen, ob HTTP Spec sonst noch etwas darüber aussagt, wie man den Client darüber informieren könnte. Die 0-Länge Brocken interessant, werde ich überprüfen, ob ich etwas in diesem Bereich tun kann. –

+0

Es gibt nur zwei Möglichkeiten, wie Sie dem Client mitteilen könnten, dass etwas schief gelaufen ist. Schließen Sie die Verbindung (was Sie tun sollten), da alles andere als das Empfangen des letzten Chunks mit der Länge 0 ein Fehler ist, oder fügen Sie nach dem Senden des letzten 0-ten Chunks einen benutzerdefinierten HTTP-Header in die Chunked-Fußzeile ein. Die meisten Clients werden einen solchen Header zwar ignorieren, aber wenn Sie Ihren eigenen Client schreiben, können Sie nach diesem Header suchen. –

+0

Sicher..danke! Remy ... –

Verwandte Themen