Comment puis-je envoyer une réponse HTTP, sans Transfert de Encoding: chunked?
J'ai une Servlet Java qui répond à l'API Twilio. Il semble que Twilio ne prend pas en charge le transfert en bloc que mes réponses sont utilisant. Comment puis-je éviter d'utiliser Transfer-Encoding: chunked
?
Voici mon code:
//response is HttpServletResponse
//xml is a String with XML in it
response.getWriter().write(xml);
response.getWriter().flush();
Je suis à l'aide de la Jetée que le conteneur de Servlet.
OriginalL'auteur Adam | 2013-05-13
Vous devez vous connecter pour publier un commentaire.
Essayer de régler le Content-length avant d'écrire dans le flux. N'oubliez pas de calculer le nombre d'octets selon l'encodage correct, par exemple:
setCharacterEncoding
est probablement pas nécessaire, puisque vous êtes l'écriture d'octets brutes. type de contenu doit inclure le codage: "text/xml; charset=UTF-8".Merci @zhong.j.yu, mise à jour de la réponse avec votre suggestion... Utilisateur peut définir le jeu de caractères directement avec le type MIME ou utiliser les setCharacterEncoding qui va se substituer à l'-tête Content-type.
OriginalL'auteur Anthony Accioly
Je crois que la Jetée sera d'utiliser des fragments de réponses quand il ne connaît pas le contenu de la réponse de la longueur et/ou qu'il utilise les connexions persistantes. Pour éviter un arrachement, vous avez besoin de définir le contenu de la réponse ou de longueur pour éviter les connexions persistantes par le paramètre "Connexion":"fermer" en-tête de la réponse.
maintenant, que est chic ALORS l'étiquette
Je vais jusqu'-vote cmbaxter de réponse. Mais, j'étais vraiment à la recherche d'un exemple de code qui a montré que la longueur du contenu de jeu, de sorte que votre réponse est mieux, malgré le fait que les deux sont corrects, donc je vais accepter la vôtre.
Dans mon cas,
Connection: close
supprime chunking, mais puis Maillot n'est pas de fournirContent-Length
, même si monMessageBodyWriter
retourne un non négatifgetSize
. Je peux le mettre moi-même, mais si la réponse est codé de gzip, monContent-Length
sera mauvais et Jersey supprime.OriginalL'auteur cmbaxter
Le conteneur de décider lui-même de l'utilisation du Contenu ou de Longueur d'Encodage de Transfert en se basant sur la taille de l'écriture des données en utilisant
Writer
ououtputStream
. Si la taille des données est supérieure à laHttpServletResponse.getBufferSize()
, alors la réponse doit être agrégés. Si non,Content-Length
sera utilisé.Dans votre cas, il suffit de retirer le 2ème rinçage code permettra de résoudre votre problème.
OriginalL'auteur Popeye