Partager via


Prise en charge de HTTP dans .NET

Le protocole HTTP (Hypertext Transfer Protocol) est un protocole permettant de demander des ressources à partir d’un serveur web. La classe System.Net.Http.HttpClient expose la possibilité 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 requête pour accéder à ces ressources.

Méthodes de requête 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 requête est idempotente si elle peut être traitée plusieurs fois sans modifier le résultat. Pour obtenir plus d’informations, consultez RFC 9110 : 9.2.2. Méthodes Idempotentes.
  • Une méthode de requête est mise en cache quand sa réponse correspondante peut être stockée pour la réutilisation. Pour plus d’informations, consultez RFC 9110 : Section 9.2.3. Méthodes et mise en cache.
  • Une méthode de requête est considérée comme une méthode sécurisée si elle ne modifie pas l’état d’une ressource. Toutes les méthodes sécurisées sont également idempotentes, mais pas toutes les méthodes idempotentes sont considérées sécurisées. Pour plus d’informations, consultez RFC 9110 : Section 9.2.1. Méthodes sécurisées.
Méthode HTTP Est idempotente Peut être mis en cache Est sûr
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 est uniquement mise en cache lorsque les en-têtes de réponse Cache-Control ou Expires appropriés sont présents. C’est très rare dans la pratique.

Codes d’état HTTP

.NET fournit une prise en charge complète du protocole HTTP, qui représente la majeure partie du trafic Internet, avec le 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 le HttpResponseMessage.StatusCode ou dans HttpRequestException avec le 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 de 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 d’information reflètent une réponse intermédiaire. La plupart des réponses intermédiaires, par exemple HttpStatusCode.Continue, sont gérées en interne avec 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 réussis indiquent que la demande du client a été 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 modifiée avec 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 je suis une théière 🫖
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