1. Contexte :
- Problèmes de connexion persistants : Pour les connexions non persistantes, le navigateur peut définir les limites de l’entité requérante ou de réponse selon que la connexion est coupée ou non ; Pour les connexions continues, cette approche ne fonctionne évidemment pas. Parfois, même si j’ai envoyé toutes les données, le navigateur ne sait pas s’il y aura de nouvelles données sur la connexion ouverte, donc il attend simplement.
- Résoudre avec la longueur du contenu : Calculez la longueur de l’entité et dites à l’autre partie à travers la tête. Le navigateur peut déterminer que l’entité de réponse est supérieure par l’information de longueur de la Longueur du Contenu
- Nouveau problème avec la longueur du contenu : Puisque le champ Longueur du contenu doit vraiment refléter la longueur de l’entité, la longueur est inconnue pour le contenu généré dynamiquement tant que le contenu n’est pas créé. À ce stade, pour obtenir la longueur avec précision, vous ne pouvez ouvrir qu’un tampon suffisamment grand et attendre que tout le contenu soit généré avant de calculer. Cependant, cela nécessite plus de surcharge mémoire d’une part, et d’autre part, cela fera attendre le client plus longtemps.
- Nous avons besoin d’un nouveau mécanisme qui ne dépend pas de la longueur de l’en-tête et qui connaisse les frontières des entités - Transfer-Encoding : chunked.
2. Encodage par transfert (en blocs)
- Le transfer-encodage est un champ d’en-tête HTTP (champ d’en-tête de réponse), qui signifie littéralement « encodage de transfert ». La dernière spécification HTTP ne définit qu’un seul type de transport d’encodage : en blocs.
- L’encodage par transfert en blocs est un mécanisme de transfert de données dans le protocole de transfert d’hypertexte (HTTP) qui permet de diviser les données HTTP envoyées par un serveur web au client en plusieurs parties. L’encodage par transport de blocs n’est disponible que dans la version 1.1 du protocole HTTP (HTTP/1.1).
- Les données sont décomposées en une série de morceaux et envoyées en un ou plusieurs morceaux afin que le serveur puisse envoyer des données sans connaître à l’avance la taille totale du contenu envoyé.
Méthodes spécifiques
- Après avoir ajouté Transfer-Encoding : chunked à l’en-tête, cela signifie que le paquet est chunké. Dans ce cas, les entités du paquet doivent être transmises en une série de blocs à la place.
- Chaque morceau contient la valeur de longueur hexadécimale et les données, et la valeur de la longueur est exclusive à une ligne, et la longueur n’inclut pas le CRLF à la fin, ni le CRLF à la fin des données fragmentées.
- La dernière valeur de longueur du chunk doit être 0, et les données du chunk correspondantes n’ont pas de contenu, indiquant la fin de l’entité.
asp.net Code de test de base :
|