2010-03-30 2 views

Répondre

0

Avec GZIP, la longueur totale du contenu compressé est imprévisible au préalable. C'est seulement connu quand le dernier bit a été compressé. Dans Tomcat, une réponse GZIP est généralement envoyée directement par morceaux (avec Transfer-Encoding: chunked) et n'est jamais entièrement mise en mémoire tampon, car il s'agit peut-être d'un problème de mémoire. Donc, je ne vois pas comment obtenir la longueur du contenu autrement que de compter vous-même les octets écrits dans le flux de sortie, ou de tamponner manuellement tout le flux de sortie de la réponse et de l'envoyer manuellement à proximité (ce qui peut être un problème de mémoire).

+0

Merci! C'est utile. J'ai maintenant une valve et un GzipOutputFilter personnalisé qui garde la trace du nombre d'octets qu'il a envoyé. Puis je le rince manuellement dans ma valve. Assez désordonné mais ça marche. Je pense qu'un meilleur moyen pourrait être d'ajouter un OutputFilter au pipeline après le GzipOutputFilter et faire le suivi là-bas. Des idées sur comment ajouter un OutputFilter? Est-ce que je pourrais faire ça d'un auditeur? Via JMX? –