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 entsprechendenCache-Control
- oderExpires
-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.
Serverfehlerstatuscodes
Die Serverfehlerstatuscodes geben an, dass auf dem Server eine unerwartete Bedingung aufgetreten ist, die ihn daran hinderte, die Anforderung zu erfüllen.