La connexion s'ouvre. Les en-têtes de la requête partent. Le fichier semble ne pas bouger. Une explication est que le client attend une réponse à Expect: 100-continue avant d'envoyer son corps.

Le mécanisme permet au destinataire de rejeter une requête d'après ses en-têtes avant qu'un envoi potentiellement volumineux ne soit transmis. La séquence réussie habituelle est :

request headers → 100 Continue → request body → final response

100 est informatif : il autorise le client à poursuivre, mais ne signifie pas que le fichier a été stocké ni que l'opération applicative a réussi. Un Git push renvoyant HTTP 417 est un cas concret d'attente non satisfaite.

Déterminer quelle réponse le client a reçue

ObservationSignification à examiner
100 ContinueLe client peut poursuivre avec le corps
Un refus définitif avant le corpsL'opération a été refusée au stade des en-têtes
Aucune réponse intermédiaire attendueLa politique d'attente du client et le traitement sur ce chemin

curl propose un réglage d'attente dédié à expect-continue. Si cette attente de libcurl expire sans la réponse attendue, il envoie quand même le corps ; l'expiration n'est pas automatiquement l'échec de tout le transfert. Le réglage est distinct du temps accordé au transfert complet. Augmenter ce dernier peut laisser la même pause initiale inexpliquée.

Identifiez aussi quelle conversation HTTP porte Expect. Avec un CONNECT ordinaire vers une destination HTTPS, l'échange d'envoi du site se trouve à l'intérieur de TLS ; le proxy mandataire n'inspecte pas simplement son en-tête d'attente interne. Un chemin d'interception ou de transfert en clair est différent.

Retirer l'attente peut être un choix de compatibilité délibéré, mais cela signifie que le client peut commencer à envoyer un corps volumineux avant d'apprendre un refus précoce. Comparez ce comportement à l'exigence réelle. Ne présentez pas un contournement historique pour un ancien proxy comme une consigne universelle de supprimer l'en-tête de chaque envoi.

Articles similaires