2010-07-21 4 views
19

Ist es möglich, den Content-Length-Header zu setzen und auch chunked Transfer-Codierung zu verwenden? und löst dies das Problem, die Länge der Antwort auf der Clientseite nicht zu kennen, wenn chunked verwendet wird? Das Szenario, über das ich nachdenke, ist, wenn Sie eine große Datei übertragen müssen und es kein Problem gibt, ihre Größe zu bestimmen, aber sie ist zu groß, um vollständig zwischengespeichert zu werden. (Wenn Sie nicht Chunked verwenden, dann muss die ganze Antwort zuerst gepuffert werden? Richtig ??)Chunked-Codierung und Content-Length-Header

danke.

+3

Wenn Sie RFC-Referenzen oder etwas ähnliches erwähnen könnten, wäre es großartig. – p00ya00

Antwort

22

1) Nein: "Nachrichten MÜSSEN NICHT sowohl ein Content-Length-Header-Feld als auch ein Nicht-Identity-Transfer-Coding enthalten. Wenn die Nachricht ein Non-Identity-Transfer-Coding enthält, MUSS die Content-Length ignoriert werden. " (RFC 2616, Section 4.4)

2) Und nein, Sie können Content-Länge und Stream verwenden; Das Protokoll legt nicht fest, wie Ihre Implementierung funktioniert.

+0

Ich hoffe, Chunked Transfer-Codierung ist ein Beispiel für Stream; du hast es hier erwähnt, oder? Es kann auch Bereichsanforderungen enthalten. habe ich recht? –

7

Nun, Sie können immer eine Überschrift senden, die die Größe der Datei angibt. So etwas wie response.addHeader("File-Size","size of the file");
Und ignorieren Sie die Content-Length-Header.

Die Client-Implementierung muss optimiert werden, um diesen Wert zu lesen, aber hey können Sie beide Dinge erreichen :)

+0

Die einfachen Lösungen sind die besten :-) – EZDsIt

+1

Die Konvention ist die Verwendung eines 'X-' Präfix auf jedem Nicht-Standard-Header. Ein HTTP-Proxy kann sich gut dafür entscheiden, Ihren nicht standardmäßigen Nicht-X-Header zu löschen. – MSalters

+0

Dank MSalters, wurde nur auf eine ähnliche Leitlinie anderswo verwiesen, zu schätzen wissen. – Gyan

Verwandte Themen