HTTP-Unterstützung in .NET

Hypertext Transfer Protocol (oder HTTP) ist ein Protokoll zum Anfordern von Ressourcen von einem Webserver. Die System.Net.Http.HttpClient-Klasse ermöglicht, HTTP-Anforderungen zu senden und HTTP-Antworten von einer Ressource zu empfangen, die durch einen URI identifiziert wird. Viele Arten von Ressourcen sind im Web verfügbar, und HTTP definiert eine Reihe von Anforderungsmethoden für den Zugriff auf diese Ressourcen.

HTTP-Anforderungsmethoden

Die Anforderungsmethoden werden durch mehrere Faktoren unterschieden, zunächst nach ihrem Verb, aber auch nach den folgenden Merkmalen:

  • Eine Anforderungsmethode ist idempotent, wenn sie mehrmals erfolgreich verarbeitet werden kann, ohne dass das Ergebnis geändert wird. Weitere Informationen finden Sie unter RFC 9110: 9.2.2. Idempotent Methods (Idempotente Methoden).
  • Eine Anforderungsmethode kann zwischengespeichert werden, wenn die entsprechende Antwort zur Wiederverwendung gespeichert werden kann. Weitere Informationen finden Sie unter RFC 9110: Abschnitt 9.2.3. Methods and Caching (Methoden und Zwischenspeicherung).
  • Eine Anforderungsmethode gilt als sichere Methode, wenn sie den Zustand einer Ressource nicht ändert. Alle sicheren Methoden sind ebenfalls idempotent, aber nicht alle idempotenten Methoden gelten als sicher. Weitere Informationen finden Sie unter RFC 9110: Abschnitt 9.2.1. Safe Methods (Sichere Methoden).
HTTP-Methode ist idempotent ist zwischenspeicherbar ist sicher
GET ✔️ Ja ✔️ Ja ✔️ Ja
POST ❌ Nein ⚠️ Selten ❌ Nein
PUT ✔️ Ja ❌ Nein ❌ Nein
PATCH ❌ Nein ❌ Nein ❌ Nein
DELETE ✔️ Ja ❌ Nein ❌ Nein
HEAD ✔️ Ja ✔️ Ja ✔️ Ja
OPTIONS ✔️ Ja ❌ Nein ✔️ Ja
TRACE ✔️ Ja ❌ Nein ✔️ Ja
CONNECT ❌ Nein ❌ Nein ❌ Nein

Die POST-Methode kann nur zwischengespeichert werden, wenn die entsprechenden Cache-Control- oder Expires-Antwortheader vorhanden sind. Dies ist in der Praxis sehr ungewöhnlich.

HTTP-Statuscodes

.NET bietet mit dem HttpClient umfassende Unterstützung für das HTTP-Protokoll, das den meisten Internetverkehrs ausmacht. Weitere Informationen finden Sie unter Erstellen von HTTP-Anforderungen mit der HttpClient-Klasse. Anwendungen empfangen HTTP-Protokollfehler durch Abfangen einer HttpRequestException. HTTP-Statuscodes werden entweder in HttpResponseMessage mit dem HttpResponseMessage.StatusCode oder in HttpRequestException mit dem HttpRequestException.StatusCode gemeldet, falls die aufgerufene Methode keine Antwortnachricht zurückgibt. Weitere Informationen zur Fehlerbehandlung finden Sie unter HTTP-Fehlerbehandlung, und weitere Informationen zu Statuscodes finden Sie unter RFC 9110, HTTP Semantics: Status Codes (Statuscodes).

Informative Statuscodes

Informative Statuscodes spiegeln eine vorläufige Antwort wider. Die meisten vorläufigen Antworten wie HttpStatusCode.Continue werden intern von HttpClient behandelt und dem Benutzer nie angezeigt.

HTTP-Statuscode HttpStatusCode
100 HttpStatusCode.Continue
101 HttpStatusCode.SwitchingProtocols
102 HttpStatusCode.Processing
103 HttpStatusCode.EarlyHints

Erfolgsstatuscodes

Die Erfolgsstatuscodes geben an, dass die Anforderung des Clients erfolgreich empfangen, verstanden und akzeptiert wurde.

HTTP-Statuscode 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

Umleitungsstatuscodes

Umleitungsstatuscodes erfordern, dass der Benutzer-Agent Maßnahmen ergreift, um die Anforderung zu erfüllen. Die automatische Umleitung ist standardmäßig aktiviert. Sie kann mit HttpClientHandler.AllowAutoRedirect oder SocketsHttpHandler.AllowAutoRedirect geändert werden.

HTTP-Statuscode HttpStatusCode
300 HttpStatusCode.MultipleChoices oder HttpStatusCode.Ambiguous
301 HttpStatusCode.MovedPermanently oder HttpStatusCode.Moved
302 HttpStatusCode.Found oder HttpStatusCode.Redirect
303 HttpStatusCode.SeeOther oder HttpStatusCode.RedirectMethod
304 HttpStatusCode.NotModified
305 HttpStatusCode.UseProxy
306 HttpStatusCode.Unused
307 HttpStatusCode.TemporaryRedirect oder HttpStatusCode.RedirectKeepVerb
308 HttpStatusCode.PermanentRedirect

Clientfehlerstatuscodes

Die Clientfehlerstatuscodes geben an, dass die Anforderung des Clients ungültig war.

HTTP-Statuscode 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 418 I'm a teapot (Ich bin eine Teekanne) 🫖
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

Serverfehlerstatuscodes

Die Serverfehlerstatuscodes geben an, dass auf dem Server eine unerwartete Bedingung aufgetreten ist, die ihn daran hinderte, die Anforderung zu erfüllen.

HTTP-Statuscode 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

Weitere Informationen