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
PINGLe 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 ↗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 →Cette marque suit votre propre avancement ; elle ne certifie pas la maîtrise du sujet. Effectuez l’exercice avant de passer à la suite.
