Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 11671|Répondre: 1

Longueur de contenu du protocole Http

[Copié le lien]
Publié le 24-09-2019 à 16:43:20 | | | |
préface

Le protocole HTTP est l’un des protocoles les plus importants sur Internet, bien qu’il puisse sembler simple, mais en pratique il rencontre souvent des problèmes, et nous l’avons rencontré plusieurs fois. Il y a de longues connexions et l’analyse des paquets. Vous ne pouvez rien connaître du protocole HTTP, vous devez le comprendre en profondeur. J’ai donc écrit cette série pour partager les problèmes et les expériences du protocole HTTP.



Le protocole HTTP possède un en-tête et un corps pour les paquets requête et réponse, et le corps est la ressource que vous souhaitez obtenir, comme une page html, une image jpeg, et l’en-tête sert à établir certaines conventions. Par exemple, le client et le serveur s’accordent sur certains formats de transmission, et le client obtient d’abord l’en-tête, connaît certaines informations de format, puis commence à lire le corps.

Client : Accept-Encoding :gzip (compressez-le pour moi, j’utilise du trafic, téléchargez-le d’abord puis décompressez-le lentement)

Serveur 1 : Encodage de contenu : null (Pas d’en-tête d’encodage de contenu.) Je ne donne pas de compression, le CPU n’est pas gratuit, tu le veux)

Serveur 2 : Encodage de contenu : gzip (sauvegarder le trafic pour vous, le compresser)
Client : Connexion : keep-alive (Grand frère, nous avons enfin construit une connexion TCP, nous l’utiliserons la prochaine fois)

Serveur 1 : Connexion : garder en vie (pas facile, continuer à utiliser)

Serveur 2 : Connexion : fermeture (Quiconque continue de l’utiliser avec vous, notre TCP est à usage unique, et nous devrons nous reconnecter la prochaine fois que nous le trouverons)
Le protocole HTTP ne comporte pas trois poignées de main, et lorsqu’un client demande des ressources au serveur, le côté serveur prévaut. Il existe aussi certains en-têtes qui n’ont pas de processus de négociation, mais le serveur dit directement au client quoi faire. Par exemple, la longueur de contenu ci-dessus correspond à ce que le serveur indique au client la taille du corps. Mais ! Le serveur peut ne pas être en mesure de vous dire exactement à l’avance quelle taille a le corps. Le serveur doit d’abord écrire l’en-tête, puis le corps ; si vous voulez écrire le corps majuscule dans l’en-tête, vous devez connaître la taille du corps à l’avance. Si le corps est généré dynamiquement, le serveur termine puis commence à écrire l’en-tête, ce qui nécessite beaucoup de surcharge supplémentaire, donc il se peut qu’il n’y ait pas de longueur de contenu dans l’en-tête.

Alors, comment le client connaît-il la taille du corps ? Le serveur vous le dit de trois façons.


1. Le serveur connaît déjà la taille de la ressource et vous le dit via l’en-tête de la longueur du contenu.

Content-Length:1076(body的大小是1076B,你读取1076B就可以完成任务了)

Transfer-Encoding: null


2. Le serveur ne peut pas connaître la taille de la ressource à l’avance, ou refuse de dépenser des ressources pour calculer la taille de la ressource à l’avance, il ajoutera donc un en-tête au message de réponse http appelé Transfer-Encoding :chunked, ce qui signifie transfert par bloc. Chaque bloc utilise un format fixe, avec la taille du bloc devant, les données derrière, puis le dernier bloc de taille 0. Ainsi, lorsque le client analyse l’analyse, il doit prêter attention à la suppression de certains champs inutiles.

Content-Length:null

Transfer-Encoding:chunked (接下来的body我要一块一块的传,每一块开始是这一块的大小,等我传到大小为0的块时,就没了)


3. Le serveur ne connaît pas la taille de la ressource et ne supporte pas le mode de transmission en blocs, il n’y a donc ni l’en-tête content-length ni l’en-header transfer-encoding. À ce moment-là, l’en-tête retourné par le serveur doit être proche.

Content-Length:null

Transfer-Encoding:null

Connection:close(我不知道大小,我也用不了chunked,啥时候我关了tcp连接,就说明传输结束了)





Précédent:Interprétation détaillée de la longueur du contenu dans le protocole HTTP
Prochain:Encodage par transfert du protocole HTTP (en blocs)
Publié le 24-09-2019 à 17:16:57 |
Merci, propriétaire
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com