Freigeben über


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 macht die Möglichkeit verfügbar, 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, zuerst durch ihr Verb , aber auch durch die folgenden Merkmale:

  • Eine Anforderungsmethode ist idempotent , wenn sie mehrmals erfolgreich verarbeitet werden kann, ohne das Ergebnis zu ändern. Weitere Informationen finden Sie unter RFC 9110: 9.2.2. Idempotent-Methoden.
  • Eine Anforderungsmethode ist cache-fähig, wenn ihre entsprechende Antwort zur Wiederverwendung gespeichert werden kann. Weitere Informationen finden Sie unter RFC 9110: Section 9.2.3. Methoden und Zwischenspeichern.
  • Eine Anforderungsmethode wird als sichere Methode betrachtet, wenn sie den Status einer Ressource nicht ändert. Alle sicheren Methoden sind auch idempotent, aber nicht alle idempotenten Methoden gelten als sicher. Weitere Informationen finden Sie unter RFC 9110: Section 9.2.1. 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 umfassende Unterstützung für das HTTP-Protokoll, das den meisten Internetverkehr ausmacht, mit dem HttpClient. Weitere Informationen finden Sie unter Http-Anforderungen mit der HttpClient-Klasse. Anwendungen empfangen HTTP-Protokollfehler durch das Abfangen von HttpRequestException. HTTP-Statuscodes werden entweder mit HttpResponseMessage zusammen mit HttpResponseMessage.StatusCode oder mit HttpRequestException zusammen mit HttpRequestException.StatusCode gemeldet, wenn die aufgerufene Methode keine Antwortnachricht zurückgibt. Weitere Informationen zur Fehlerbehandlung finden Sie unter HTTP-Fehlerbehandlung und weitere Informationen zu Statuscodes, siehe RFC 9110, HTTP-Semantik: Statuscodes.

Statuscodes für Informationen

Die Statuscodes für Informationen spiegeln eine Zwischenantwort wider. Die meisten Zwischenantworten, wie zum Beispiel HttpStatusCode.Continue, werden intern mit HttpClient behandelt und dem Benutzer niemals angezeigt.

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

Erfolgreiche Statuscodes

Die erfolgreichen Statuscodes 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

HTTP-Statuscodes für Umleitungen

Umleitungsstatuscodes erfordern, dass der Benutzer-Agent Maßnahmen ergreifen muss, um die Anforderung zu erfüllen. Die automatische Umleitung ist standardmäßig aktiviert, kann mit HttpClientHandler.AllowAutoRedirect oder SocketsHttpHandler.AllowAutoRedirectgeä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 deuten darauf hin, 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 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 deuten darauf hin, dass auf dem Server eine unerwartete Bedingung aufgetreten ist, die verhindert hat, dass sie die Anforderung erfüllt.

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

Siehe auch