2017-05-16 1 views
0

Ich versuche ein Problem zu beheben. http Antwort-Header: Transfer-Encoding: chunked(Spring-Boot, CXF, Tomcat) Inhalt-Länge vs Transfer-Encoding: Chunked?

Wir haben einen CXF-SOAP-Webservice in Spring-Boot + Embedded-Tomcat.

Die SOAP-Antworten erhalten eine Content-Length Header und keine Transfer-Encoding .... was ist normal, denke ich?

Leider haben wir einige ältere Client-Hacks, , die nur scheinbar mit Transfer-Encoding: chunked und keine Content-Length funktionieren.

Gibt es eine Möglichkeit, Force die Server-App mit Transfer-Encoding: chunked zu reagieren?

Was genau bestimmt welches Antwort-Format generiert wird?

Ist es irgendwie konfigurierbar?

Antwort

1

Durch Festlegen der BufferSize auf Antwort.

response.setBufferSize() setzt den Content-Length-Header der Antwortgröße. Sobald die Antwortgröße über die pufferSize hinausgeht, würde sie auf Transfer-Encoding: Chunked zurückgreifen. Die Puffergröße sollte auf einen geeigneten Wert eingestellt werden. Wenn Sie ihn auf einen höheren Wert setzen, wird die gesamte Antwort im Speicher gepuffert, bevor sie gelöscht wird. Daher sollte der Wert auf eine optimistische Größe eingestellt werden.

standardmäßig Tomcat Puffergröße auf 8K

Andere Option: Sie können einen Antwortfilter für Sie Service hinzufügen und in diesem Satz-Header Sie wollen.

1

Die Server-App antwortet je nach dem HTTP-Header der Anfrage wie gewünscht.

Wenn Anfrage http-Header enthält:

Accept-Encoding: chunked 

und nur chunked, wird der Server-App mit einem Header und Inhalt Transfer-Encoding: chunked reagieren.

Wenn also keine korrekte HTTP-Anfrage mit Angabe der Client-Funktionen möglich ist, kann ein Reverse-Proxy hinzugefügt werden, der die Anforderung durch Ändern oder Hinzufügen des Headers Accept-Encoding: chunked ändert.