HTTPQUERY
Français

100 Continue

Utilisation

Les clients qui incluent l’en-tête Expect souhaitent confirmer que le serveur est prêt à recevoir le corps du message avant de le transmettre. Lorsque le corps du message est volumineux, qu’il emploie un type de contenu que le serveur n’accepte pas, ou que l’utilisateur n’a pas l’autorisation d’envoyer des fichiers, ce procédé valide ces conditions avant tout envoi du corps.

Dès que le code de statut 100 Continue parvient au client, le corps du message est envoyé. Si le serveur renvoie 417 à la place, le client ne poursuit pas.

L’intérêt d’utiliser l’en-tête Expect avec 100-continue est d’économiser de la bande passante lorsque le serveur se montre sélectif quant au contenu qu’il reçoit et traite.

L’inconvénient tient à ce que l’en-tête et le corps de la requête HTTP sont envoyés indépendamment. Certains environnements ont tendance à les dissocier et à renvoyer une erreur au lieu de traiter la requête HTTP.

Exemple

Requête

PUT /docs HTTP/1.1
Host: example.com
Content-Type: application/pdf
Content-Length: 99000
Expect: 100-continue

Réponse

HTTP/1.1 100 Continue

Suite donnée à la requête

<PDF file contents are sent as message body>

Réponse finale

HTTP/1.1 200 OK

Le client prévoit d’envoyer au serveur un fichier PDF de 99 Ko pour traitement et le signale dans la requête HTTP, en demandant une validation préalable. Le serveur répond favorablement et le client envoie alors le corps du message. En guise de réponse finale, le serveur clôt la session HTTP par une indication de succès.

Autre cas de figure, le serveur répond par une erreur :

HTTP/1.1 417 Expectation Failed

Dans cette situation, le client n’envoie pas le PDF, et la suite des échanges reprend avec une nouvelle requête HTTP.

Expect100Continue dans les bibliothèques clientes

De nombreuses bibliothèques clientes HTTP exposent Expect100Continue sous forme de propriété configurable. En .NET, ServicePointManager.Expect100Continue détermine si les requêtes POST et PUT incluent automatiquement l’en-tête Expect: 100-continue. Désactiver cette propriété court-circuite la vérification préliminaire et envoie le corps immédiatement.

Références de code

.NET

HttpStatusCode.Continue

Rust

http::StatusCode::CONTINUE

Rails

:continue

Go

http.StatusContinue

Symfony

Response::HTTP_CONTINUE

Python3.5+

http.HTTPStatus.CONTINUE

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_CONTINUE

Angular

@angular/common/http/HttpStatusCode.Continue