← HTTP — sécurité avancée, 40 leçons de cours

Module 6 / 40 · 90 min

06. Content-Length et limites du corps

Mesurer les octets du bon message et réserver la marge d’encapsulation.

Votre progression apparaîtra ici lorsque JavaScript est actif.

La progression et le meilleur score sont enregistrés uniquement dans ce navigateur. Aucun compte n’est nécessaire ; effacer les données du navigateur les supprime. Les durées de modules sont indicatives et incluent les exercices.

Comprendre le mécanisme

Content-Length décrit une longueur en octets selon le contrat du message, pas un nombre de caractères visibles. Une requête multipart comprend fichiers, séparateurs et champs de formulaire. Une limite au niveau du proxy peut donc refuser un fichier pourtant accepté par la règle métier. La réponse d’erreur possède sa propre longueur, indépendante du fichier envoyé.

Raisonner et vérifier

Rendez cohérentes les limites du proxy, de PHP, du formulaire et du lecteur d’archive. Une limite décompressée répond à un autre risque que la taille reçue sur le réseau. Mesurez chaque frontière avec des fichiers de laboratoire connus ; gardez une marge au-dessus du fichier maximum pour le multipart, sans supprimer toute borne.

Octets

Content-Length se mesure en octets. Un caractère encodé peut occuper plusieurs octets. La taille du corps se mesure en octets et peut différer du nombre de caractères. Testez du texte UTF-8 et un fichier binaire pour éviter une limite applicative basée sur une unité différente de celle du proxy.

Erreur fréquente à comprendre

Content-Length compte les caractères visibles.

Un caractère encodé peut occuper plusieurs octets.

Multipart total

Multipart ajoute séparateurs et champs au fichier. L’enveloppe consomme aussi des octets. La requête contient fichier, séparateurs et autres champs. Une limite totale de 601000 octets refuse un fichier de 600000 si son enveloppe ajoute 2000 ; le budget doit inclure tout le message.

Erreur fréquente à comprendre

Le fichier peut atteindre exactement toute limite multipart sans marge.

L’enveloppe consomme aussi des octets.

Première limite

Le proxy peut avoir une limite avant PHP. Chaque couche conserve sa propre limite. Inventoriez CDN, proxy, serveur web et PHP. La limite la plus précoce peut refuser avant toute validation métier ; augmenter seulement upload_max_filesize ne corrige pas un plafond nginx plus bas.

Erreur fréquente à comprendre

Augmenter PHP garantit le passage de tout proxy.

Chaque couche conserve sa propre limite.

Décompression

La décompression doit avoir ses propres bornes. Le ratio de compression peut être très élevé. Un petit ZIP peut produire une sortie énorme. Bornez taille décompressée cumulée, ratio et écritures pendant extraction ; le seul poids compressé reçu ne protège pas disque et mémoire.

Erreur fréquente à comprendre

Une petite archive garantit une petite extraction.

Le ratio de compression peut être très élevé.

Nombre d’entrées

Le nombre d’entrées est une ressource à borner. Beaucoup de petites entrées consomment aussi des ressources. Des milliers de petits fichiers peuvent épuiser descripteurs et temps même sous un plafond d’octets. Limitez nombre de fichiers, profondeur et opérations dans le même budget d’import.

Erreur fréquente à comprendre

La taille compressée borne toujours le nombre de fichiers.

Beaucoup de petites entrées consomment aussi des ressources.

Messages distincts

La longueur de réponse ne mesure pas l’upload. Les messages de sens opposés ont des tailles distinctes. Content-Length de la réponse d’erreur indique son propre corps, pas celui de l’upload. Notez les tailles dans des colonnes séparées et vérifiez à quel message chaque observation appartient.

Erreur fréquente à comprendre

Un petit corps 413 indique un petit fichier envoyé.

Les messages de sens opposés ont des tailles distinctes.

Lecture bornée

Une lecture du corps doit rester bornée. Une déclaration reçue ne suffit pas à maîtriser le flux. Ne chargez pas sans plafond le corps entier en mémoire avant de décider sa taille acceptable. Une lecture progressive doit arrêter au dépassement et nettoyer les fichiers temporaires créés jusque-là.

Erreur fréquente à comprendre

Un champ de taille annoncé dispense de toute borne de lecture.

Une déclaration reçue ne suffit pas à maîtriser le flux.

Temps

Le temps de traitement est une limite indépendante. La complexité et les dépendances influencent la durée. Une taille admissible peut demander trop de temps de décompression ou de validation. Ajoutez une échéance globale et une procédure d’arrêt qui ne laisse pas un import partiellement publié.

Erreur fréquente à comprendre

Limiter les octets garantit tout temps de calcul.

La complexité et les dépendances influencent la durée.

Bornes

Des essais aux frontières vérifient les limites. Il faut observer les cas proches des seuils. Essayez juste sous, à et au-dessus du plafond prévu, avec les autres champs présents. Ces cas vérifient l’unité, la marge multipart et le caractère inclusif de la règle appliquée.

Erreur fréquente à comprendre

Tester un seul fichier minuscule prouve la limite supérieure.

Il faut observer les cas proches des seuils.

Refus propre

Un refus précoce doit laisser les données métier intactes. La gestion des effets partiels doit respecter le contrat d’import. Après dépassement, contrôlez base, fichiers temporaires et état d’import. Un message d’erreur correct ne suffit pas si des éléments extraits deviennent tout de même consultables dans le répertoire public.

Erreur fréquente à comprendre

Un refus de taille autorise une importation partielle silencieuse.

La gestion des effets partiels doit respecter le contrat d’import.

Atelier guidé : lire, expliquer et vérifier le code

Fichier : 600 000 octets
Enveloppe multipart et champs : 2 000 octets
Limite totale de requête : 601 000 octets

Additionnez 600000 et 2000 : le corps total atteint 602000 octets, donc dépasse 601000. Le fichier seul est sous la limite mais la requête complète ne l’est pas. Reproduisez ce raisonnement aux différentes couches et gardez une validation séparée du contenu décompressé.

Cette mesure oublie les champs et séparateurs. Le fichier participe aussi au corps. La réponse est un autre message. L’encapsulation s’ajoute au fichier.

Travail pratique : Testez une taille juste sous la limite réseau et une juste au-dessus. Recommencez en multipart avec le même contenu de fichier.

Critères de correction : Relevez octets de requête et statut dans le proxy ; confirmez si l’application est appelée. Testez séparément le plafond métier puis le volume décompressé. Consignez la couche qui refuse chaque cas.

Exemple commenté

POST /lab/upload HTTP/1.1
Host: lab.example.test
Content-Type: text/plain
Content-Length: 4

PING

Le corps contient quatre octets ASCII. L’enveloppe de la requête n’est pas comprise dans cette valeur.

Exercice de mise en pratique

Testez une taille juste sous la limite réseau et une juste au-dessus. Recommencez en multipart avec le même contenu de fichier.

Voir une proposition de correction

Relevez octets de requête et statut dans le proxy ; confirmez si l’application est appelée. Testez séparément le plafond métier puis le volume décompressé. Consignez la couche qui refuse chaque cas.

Points de vérification

  • Mesurer des octets.
  • Prévoir la marge multipart.
  • Séparer taille reçue et décompressée.

Contrôle de connaissances

Cours associé : 06. Content-Length et limites du corps ↗
La taille multipart correspond-elle exactement à celle du seul fichier ?

Documentation de référence ↗

Validation du module

101 questions, objectif pédagogique de 75 %. Durée conseillée de 150 minutes, sans limite imposée. Les questions et les choix sont mélangés ; le corrigé apparaît après validation. Le contrôle rapide de la leçon et l’examen final du cours restent des exercices distincts.

Commencer ou reprendre les 101 questions →