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.
Understand this common mistake
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.
Understand this common mistake
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.
Understand this common mistake
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.
Understand this common mistake
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.
Understand this common mistake
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.
Understand this common mistake
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à.
Understand this common mistake
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é.
Understand this common mistake
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.
Understand this common mistake
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.
Understand this common mistake
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.
Worked example
POST /lab/upload HTTP/1.1
Host: lab.example.test
Content-Type: text/plain
Content-Length: 4
PINGLe corps contient quatre octets ASCII. L’enveloppe de la requête n’est pas comprise dans cette valeur.
Practical exercise
Testez une taille juste sous la limite réseau et une juste au-dessus. Recommencez en multipart avec le même contenu de fichier.
View a suggested solution
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.
Verification checklist
- Mesurer des octets.
- Prévoir la marge multipart.
- Séparer taille reçue et décompressée.
Knowledge check
Related lesson: 06. Content-Length et limites du corps ↗Module validation
101 questions, local practice target of 75%. Suggested duration of 150 minutes, with no enforced deadline. Questions and choices are shuffled; corrections appear after submission. The quick lesson check and the final course exam remain separate exercises.
Start or resume the 101 questions →This records your own progress and does not certify mastery. Complete the exercise before moving on.
