2017-05-16 3 views
0

J'essaie de résoudre un problème re. En-tête de réponse http: Transfer-Encoding: chunked(spring-boot, cxf, tomcat) Contenu-Longueur vs Transfert-Encodage: chunked?

Nous avons un service web CXF-SOAP dans spring-boot + embedded-tomcat.

Les réponses SOAP obtiennent un en-tête Content-Length, et aucun Transfer-Encoding .... ce qui est normal, je suppose?

Malheureusement, nous avons quelques anciens clients-hacks, qui semblent fonctionner avec Transfer-Encoding: chunked et pas .

Y at-il un moyen de force l'application-serveur de répondre avec Transfer-Encoding: chunked?

Qu'est-ce qui détermine exactement quel format de réponse est généré?

Est-il en quelque sorte configurable?

Répondre

1

En définissant la réponse BufferSize sur. Response.setBufferSize() définit l'en-tête Content-Length de la taille de la réponse.

Une fois que la taille de la réponse dépasse la taille bufferSize, elle est récupérée par Transfer-Encoding: Chunked. La taille de la mémoire tampon doit être définie sur une valeur appropriée. Le définir à une valeur plus élevée mettrait en mémoire tampon toute la réponse en mémoire avant de la purger. La valeur doit donc être définie sur une taille optimiste.

Par taille de la mémoire tampon par défaut Tomcat est réglé sur 8K

option Autre: Vous pouvez ajouter un filtre de réponse pour vous service et dans cet en-tête de série que vous voulez.

1

L'application serveur répondra mais vous souhaitez qu'elle réponde, en fonction de l'en-tête HTTP de la demande.

Si la demande en-tête http contient:

Accept-Encoding: chunked 

et seulement chunked, l'application serveur répondra avec un en-tête et le contenu Transfer-Encoding: chunked.

Donc, si l'on ne peut pas faire une requête http correcte indiquant les capacités du client, on peut ajouter un proxy inverse, en modifiant la requête en changeant ou en ajoutant l'en-tête Accept-Encoding: chunked.