La longueur du contenu est utilisée pour décrire la longueur de transfert du corps du message. Dans le protocole HTTP, il existe une différence entre la longueur de l’entité du message et la longueur de transmission de l’entité du message, par exemple, sous la compression gzip, la longueur de l’entité du message est la longueur avant la compression, et la longueur de transmission de l’entité du message est la longueur après la compression gzip.
Dans des interactions HTTP spécifiques, la manière dont le client obtient la longueur du message repose principalement sur les règles suivantes :
Si la réponse est 1xx, 204, 304 ou demande principale, le contenu de l’entité du message est directement ignoré. S’il existe un encodage par transfert, la méthode en codage par transfert est préférée pour trouver la longueur correspondante. Par exemple, le modèle Chunked. « S’il y a une longueur de contenu dans la tête, alors cette longueur de contenu représente à la fois la longueur du corps et la longueur de transmission. Si la longueur de l’entité et la longueur de transfert ne sont pas égales (par exemple, le Transfer-Encoding est défini), alors la Content-Length ne peut pas être fixée.Si le Transfer-Encoding est activé, alors la Longitude-Contenu sera ignorée”。 L’avantage de cette traduction de phrases est qu’il n’y a qu’un seul point : avec le codage par transfert, il ne peut pas y avoir de longueur de contenu. Transmission de la distance. Je n’ai pas fait attention, je ne l’ai pas lu en détail :) La fermeture de la connexion via le serveur détermine la longueur du message transmis. (Le demandeur ne peut pas indiquer la fin du corps de la requête en fermant la connexion, car cela laisserait le serveur sans possibilité de continuer à répondre.) Cette situation correspond principalement aux connexions courtes, c’est-à-dire le mode non-maintien en vie. HTTP 1.1 doit prendre en charge le mode chunk. Car lorsque la longueur du message est incertaine, cette situation peut être gérée via le mécanisme du bloc. Dans l’en-tête contenant le contenu du message, s’il existe un champ de longueur de contenu, la valeur correspondante du champ doit correspondre exactement à la longueur du sujet du message. « La longueur d’entité d’un message est la longueur du corps du message avant que tout codage de transfert ne soit appliqué » C’estS’il y a un chunk, il ne peut pas y avoir de longueur de contenu 。
Le mécanisme de connexion persistante d’HTTP/1.0 a été introduit plus tard, et il est implémenté via l’en-tête Connection : keep-alive, qui peut être utilisé à la fois par le serveur et le client pour s’indiquer mutuellement qu’ils n’ont pas besoin de déconnecter la connexion TCP après avoir envoyé les données pour une utilisation ultérieure.HTTP/1.1 exige que toutes les connexions soient persistantes,À moins que vous n’ajoutez explicitement Connection : près de l’en-tête。 Ainsi, en fait, le champ d’en-tête Connection dans HTTP/1.1 n’a plus la valeur de keep-alive, mais pour des raisons historiques, de nombreux serveurs web et navigateurs conservent encore l’habitude d’envoyer Connection : keep-alive vers des connexions longues HTTP/1.1.
En fait, les derniers peuvent presque être ignorés, et un bref résumé est le suivant :
1. Longueur du contenu : Si elle existe et est valide, elle doit être exactement la même que la longueur de transmission du contenu du message. (Testé pour raccourcir si c’est trop court, et trop long pour provoquer un temps mort.) ) 2. S’il y a un encodage de transfert (le focus est en blocs), il ne peut y avoir pas de longueur de contenu dans l’en-tête, et il sera ignoré. 3. Si une connexion courte est utilisée, la longueur de transmission du message peut être déterminée directement en fermant la connexion via le serveur. (C’est facile à comprendre) Combiné à d’autres fonctionnalités du protocole HTTP, par exemple, Http1.1 ne supportait pas le maintien en vie. On peut alors tirer les conclusions suivantes : 1. Dans Http 1.0 et versions antérieures, le champ de longueur de contenu est optionnel. 2. Dans http1.1 et versions ultérieures. Si vous restez en vie, alors la longueur du contenu et le morceau doivent être l’un des deux. S’il n’est pas maintenu en vie, c’est identique à http1.0. longueur du contenu.
|