J'ai souvent besoin de générer dynamiquement du contenu à partir d'un servlet/restlet ou autre, et je ne connais pas la longueur à l'avance. Si le client est un navigateur, la barre de progression ne fonctionne pas correctement, car je n'ai pas défini l'en-tête Content-Length. Existe-t-il un moyen de définir une longueur de contenu estimée, de sorte que la barre de progression fonctionne "plus ou moins"?Envoi de devis HTTP Content-Length from Servlet etc
Répondre
Non, le Content-Length value must be the exact content length:
Lorsqu'un Content-Length est donnée dans un message où un corps de message est autorisé, sa valeur de champ doit correspondre exactement au nombre d'octets dans le corps de message. Les agents utilisateurs HTTP/1.1 DOIVENT aviser l'utilisateur lorsqu'une longueur invalide est reçue et détectée.
vous ne pouvez donc pas envoyer juste une estimation Content-Length valeur pour obtenir une barre de progression.
Vous ne savez pas exactement ce que vous demandez. Vous pouvez toujours définir vous-même l'en-tête Content-Length, même s'il doit correspondre à la quantité de données que vous envoyez. La manière standard de gérer les données dynamiques lorsque vous ne savez rien sur la longueur à l'avance est de mettre en tampon la sortie, de trouver la longueur réelle, de définir l'en-tête, puis de vider la sortie. Pas vraiment répondre à ce que vous semblez demander, mais je pense que ce que vous demandez est impossible.
La seule façon de le faire (as decribed in an RFC) n'est pas de définir l'en-tête Content-Length, c'est-à-dire. l'en-tête de réponse ne contient pas de ligne Content-Length. Dans ce cas, le navigateur ne sait pas combien de temps le corps est, de sorte que le serveur "dit" au navigateur que tout le corps a été envoyé par closing the connection.
Je ne sais pas si le conteneur Java fermera automatiquement la connexion dans ce cas ou si vous pouvez le faire vous-même via une sorte de filtre.
Pour répondre à votre question: Je ne pense pas qu'il soit possible de donner une estimation au navigateur.
Si la longueur de votre contenu n'est pas connue à l'avance, vous pouvez utiliser le “chunked” content encoding (selon HTTP version 1.1). Cependant, cela ne résoudra pas votre problème de barre de progression, et il n'y a aucun moyen de le faire fonctionner, à moins de connaître le contenu que vous allez envoyer.
Bien que je ne vous recommande pas de le faire, vous pouvez définir la longueur du contenu à une estimation de ce que le contenu est, et vous obtiendrez une barre de progression. Tant que vous pouvez garantir que votre estimation est égale ou supérieure au contenu réel, cela fonctionnera généralement. Si votre contenu réel est supérieur à l'estimation, le contenu sera tronqué à la longueur de contenu spécifiée.
J'ai testé cela dans Firefox, IE et Chrome sans problème. La spécification HTTP indique que les agents utilisateurs DOIVENT aviser l'utilisateur si la longueur spécifiée ne correspond pas à la longueur réelle, mais je n'ai pas observé ce comportement avec un navigateur que j'ai testé. J'ai étudié cette option en tant qu'option, mais je l'ai abandonnée en raison des conflits potentiels imprévus pour jouer en dehors des limites de la spécification.
- 1. shutdown/undeploy tomcat from Servlet
- 2. Vérification de l'adresse postale, etc. Get County from Zip
- 3. Envoi d'un fichier en Java en utilisant un servlet
- 4. Erreur Http 503 dans la connexion de servlet
- 5. Stock devis API?
- 6. Je crée un menu (maison, mon devis, envoie un devis) en utilisant <fb:tab>
- 7. Envoyer des informations d'erreur HTTP personnalisées à Flash, JavaScript, etc
- 8. appel httpclient de servlet
- 9. Comment créer un plugin wordpress - devis du jour - devis du site externe
- 10. Python 2.6 envoi objet de connexion sur la file d'attente/tubes/etc
- 11. Comment arrêter un conteneur de servlet depuis un servlet?
- 12. urllib2 envoi de données
- 13. Qt Image From Web
- 14. Appel de servlet à partir d'une autre servlet
- 15. Servlet de framework Velocity
- 16. Envoi de courrier électronique de sorte que "from" soit un nom ou un texte plutôt qu'une adresse e-mail réelle
- 17. AccessControlException lors de la connexion au serveur HTTP à partir de la servlet Tomcat
- 18. Est-il possible d'écrire un filtre de servlet pour inspecter les codes de réponse HTTP?
- 19. . Composants .NET pour les devis d'expédition en temps réel
- 20. Obtenir Http Numéro de code d'état (200, 301, 404, etc.) à partir de HttpWebRequest et HttpWebResponse
- 21. Authentification JCIFS NTLM pour les connexions HTTP sur GlassFish (ou tout conteneur de servlet)
- 22. Mappage Enum from String
- 23. Modifier le style de devis par défaut pour htmlentities
- 24. NSMutableArray from filterUsingPredicate erreur
- 25. From String to Blob
- 26. IImage * from IBitmapImage *
- 27. link_to from helper
- 28. set LD_LIBRARY_PATH from Makefile
- 29. Fluid NHibernate from appSettings
- 30. RedirectToAction From ActionFilter
Je soupçonne aussi que ce soit impossible, mais j'espère que c'est juste que mon HTTP-fu n'est pas à la hauteur! –