2016-07-06 32 views
2

Wenn ich eine POST-Anfrage über Jersey ReST Client sendet es automatisch Header Transfer-Codierung: [Chunked].Wie sende ich eine POST-Anfrage ohne Transfer Encoding: Chunked von Jersey ReST Client 2.22.2

Gibt es eine Möglichkeit, die Verwendung von content-length: statt Transfer-Encoding.

WebTarget webTarget = client.target(connection.getServerUrl()); 
    Invocation.Builder builder = webTarget.request(MediaType.APPLICATION_XML); 
    Response response = builder.post(Entity.xml(requestBroker)); 

Nach der Zugabe von Content-Length-Eigenschaft auch das Verhalten gleiche

WebTarget webTarget = client.target(connection.getServerUrl()); 
    Invocation.Builder builder = webTarget.request(MediaType.APPLICATION_XML); 
    Entity entity = Entity.xml(requestBroker); 
    client.property("Content-Length", entity.toString().getBytes().length); 
    Response response = builder.post(Entity.xml(requestBroker)); 

Antwort

2

HTTP 1.1 Version ab segmentierte Übertragungscodierung Standard für POST ist, in diesen Daten als Chunks gesendet wird und damit der Absender kann beginnen Übertragen von dynamisch generiertem Inhalt, bevor die Gesamtgröße dieses Inhalts bekannt ist. Die Größe jedes Chunks wird unmittelbar vor dem Chunk selbst gesendet, so dass der Empfänger feststellen kann, wann er Daten für diesen Chunk empfangen hat. Die Datenübertragung wird durch einen letzten Block der Länge Null beendet.

Gibt es eine Möglichkeit Verwendung von Content-Length zu erzwingen: statt Transfer-Encoding

die Content-Length-Header ein, bevor Sie Ihre POST-Anforderung senden. Dies funktioniert jedoch nur in http 1.0. Wenn Sie die Inhaltslänge festlegen und die Größe der Postanforderungsdaten größer als die Inhaltslänge ist, werden die empfangenen Daten abgeschnitten.

In der Version 1.1 des HTTP-Protokolls, die segmentierte Übertragungsmechanismus immer und sowieso akzeptabel, wenn auch nicht in der TE (Übertragungscodierung) Request-Header-Feld aufgelistet angesehen wird, und wenn sie mit anderen Transfermechanismen verwendet, , sollte immer zuletzt auf die übertragenen Daten angewendet werden und niemals mehr als einmal. Quelle Wikipedia - Chunked Transfer Encoding


Während in der Antwort können wir Transfer-Encoding durch die Puffergröße Einstellung auf Antwort mit response.setBufferSize vermeiden(). Aber wenn unsere Antwortgröße über die Puffergröße hinausgeht, würde sie auf Transfer-Encoding: Chunked zurückgreifen.


Different Transfer Mechanisms

Mehr Info:

Content-Length header versus chunked encoding

Remove Transfer-Encoding:chunked in the POST request?

avoiding chunked encoding of HTTP/1.1 response

hoffe, es hilft!

+0

@Amarnath Auch nach dem Hinzufügen der Content-Length-Header zu Jersey Trikot Kommissionierung der chunked Transfer-Codierung. – Rohit

+0

@Amarnath - Danke für die Antworten. Das Problem, auf das ich stehe, ist auf der Anfrage Seite. – Rohit

+0

@Rohit - Weitere Informationen hinzugefügt, hoffe, dass Sie jetzt geklärt werden. –