Prise en charge de HTTP dans .NET

Le protocole HTTP (Hypertext Transfer Protocol) permet de demander des ressources à partir d’un serveur web. La classe System.Net.Http.HttpClient permet d’envoyer des requêtes HTTP et de recevoir des réponses HTTP d’une ressource identifiée par un URI. De nombreux types de ressources sont disponibles sur le web et HTTP définit un ensemble de méthodes de demande pour accéder à ces ressources.

Méthode de demande HTTP

Les méthodes de demande sont différenciées par plusieurs facteurs, d’abord par leur verbe, mais aussi par les caractéristiques suivantes :

  • Une méthode de demande est idempotente si elle peut être traitée plusieurs fois sans changer le résultat. Pour plus d’informations, consultez RFC 9110 : 9.2.2. Méthodes idempotentes.
  • Une méthode de demande peut être mise en cache quand sa réponse correspondante peut être stockée pour réutilisation. Pour plus d’informations, consultez RFC 9110 : Section 9.2.3. Méthodes et mise en cache.
  • Une méthode de demande est considérée comme une méthode sûre si elle ne modifie pas l’état d’une ressource. Toutes les méthodes sûres sont également idempotentes, mais toutes les méthodes idempotentes ne sont pas considérées comme sûres. Pour plus d’informations, consultez RFC 9110 : Section 9.2.1. Méthodes sûres.
HTTP method Est idempotente Peut être mise en cache Est sûre
GET ✔️ Oui ✔️ Oui ✔️ Oui
POST ❌ Non ⚠️ Rarement ❌ Non
PUT ✔️ Oui ❌ Non ❌ Non
PATCH ❌ Non ❌ Non ❌ Non
DELETE ✔️ Oui ❌ Non ❌ Non
HEAD ✔️ Oui ✔️ Oui ✔️ Oui
OPTIONS ✔️ Oui ❌ Non ✔️ Oui
TRACE ✔️ Oui ❌ Non ✔️ Oui
CONNECT ❌ Non ❌ Non ❌ Non

La méthode POST peut être mise en cache seulement quand les en-têtes de réponse appropriés Cache-Control ou Expires sont présents. C’est très rare dans la pratique.

Codes d’état HTTP

.NET fournit un support complet du protocole HTTP, qui constitue la majeure partie du trafic Internet, avec HttpClient. Pour plus d’informations, consultez Effectuer des requêtes HTTP avec la classe HttpClient. Les applications obtiennent des erreurs de protocole HTTP quand elles interceptent une exception HttpRequestException. Les codes d’état HTTP sont signalés dans HttpResponseMessage avec HttpResponseMessage.StatusCode ou dans HttpRequestException avec HttpRequestException.StatusCode si la méthode appelée ne retourne pas de message de réponse. Pour plus d’informations sur la gestion des erreurs, consultez Gestion des erreurs HTTP, et pour plus d’informations sur les codes d’état, consultez RFC 9110, Sémantique HTTP : Codes d’état.

Codes d’état informationnels

Les codes d’état informationnels reflètent une réponse intermédiaire. La plupart des réponses intermédiaires, par exemple HttpStatusCode.Continue, sont traitées en interne par HttpClient et ne sont jamais exposées à l’utilisateur.

Code d'état HTTP HttpStatusCode
100 HttpStatusCode.Continue
101 HttpStatusCode.SwitchingProtocols
102 HttpStatusCode.Processing
103 HttpStatusCode.EarlyHints

Codes d’état de réussite

Les codes d’état de réussite indiquent que la demande du client a été correctement reçue, comprise et acceptée.

Code d'état HTTP HttpStatusCode
200 HttpStatusCode.OK
201 HttpStatusCode.Created
202 HttpStatusCode.Accepted
203 HttpStatusCode.NonAuthoritativeInformation
204 HttpStatusCode.NoContent
205 HttpStatusCode.ResetContent
206 HttpStatusCode.PartialContent
207 HttpStatusCode.MultiStatus
208 HttpStatusCode.AlreadyReported
226 HttpStatusCode.IMUsed

Codes d’état de redirection

Les codes d’état de redirection nécessitent que l’agent utilisateur prenne des mesures pour répondre à la demande. La redirection automatique est activée par défaut, elle peut être remplacée par HttpClientHandler.AllowAutoRedirect ou SocketsHttpHandler.AllowAutoRedirect.

Code d'état HTTP HttpStatusCode
300 HttpStatusCode.MultipleChoices ou HttpStatusCode.Ambiguous
301 HttpStatusCode.MovedPermanently ou HttpStatusCode.Moved
302 HttpStatusCode.Found ou HttpStatusCode.Redirect
303 HttpStatusCode.SeeOther ou HttpStatusCode.RedirectMethod
304 HttpStatusCode.NotModified
305 HttpStatusCode.UseProxy
306 HttpStatusCode.Unused
307 HttpStatusCode.TemporaryRedirect ou HttpStatusCode.RedirectKeepVerb
308 HttpStatusCode.PermanentRedirect

Codes d’état d’erreur du client

Les codes d’état d’erreur du client indiquent que la demande du client n’était pas valide.

Code d'état HTTP HttpStatusCode
400 HttpStatusCode.BadRequest
401 HttpStatusCode.Unauthorized
402 HttpStatusCode.PaymentRequired
403 HttpStatusCode.Forbidden
404 HttpStatusCode.NotFound
405 HttpStatusCode.MethodNotAllowed
406 HttpStatusCode.NotAcceptable
407 HttpStatusCode.ProxyAuthenticationRequired
408 HttpStatusCode.RequestTimeout
409 HttpStatusCode.Conflict
410 HttpStatusCode.Gone
411 HttpStatusCode.LengthRequired
412 HttpStatusCode.PreconditionFailed
413 HttpStatusCode.RequestEntityTooLarge
414 HttpStatusCode.RequestUriTooLong
415 HttpStatusCode.UnsupportedMediaType
416 HttpStatusCode.RequestedRangeNotSatisfiable
417 HttpStatusCode.ExpectationFailed
418 I'm a teapot 🫖
421 HttpStatusCode.MisdirectedRequest
422 HttpStatusCode.UnprocessableEntity
423 HttpStatusCode.Locked
424 HttpStatusCode.FailedDependency
426 HttpStatusCode.UpgradeRequired
428 HttpStatusCode.PreconditionRequired
429 HttpStatusCode.TooManyRequests
431 HttpStatusCode.RequestHeaderFieldsTooLarge
451 HttpStatusCode.UnavailableForLegalReasons

Codes d’état d’erreur du serveur

Les codes d’état d’erreur du serveur indiquent que le serveur a rencontré une condition inattendue qui l’a empêché de répondre à la demande.

Code d'état HTTP HttpStatusCode
500 HttpStatusCode.InternalServerError
501 HttpStatusCode.NotImplemented
502 HttpStatusCode.BadGateway
503 HttpStatusCode.ServiceUnavailable
504 HttpStatusCode.GatewayTimeout
505 HttpStatusCode.HttpVersionNotSupported
506 HttpStatusCode.VariantAlsoNegotiates
507 HttpStatusCode.InsufficientStorage
508 HttpStatusCode.LoopDetected
510 HttpStatusCode.NotExtended
511 HttpStatusCode.NetworkAuthenticationRequired

Voir aussi