Obsługa protokołu HTTP na platformie .NET

Protokół http (Hypertext Transfer Protocol) to protokół żądający zasobów z serwera internetowego. Klasa System.Net.Http.HttpClient uwidacznia możliwość wysyłania żądań HTTP i odbierania odpowiedzi HTTP z zasobu zidentyfikowanego przez identyfikator URI. Wiele typów zasobów jest dostępnych w Internecie, a protokół HTTP definiuje zestaw metod żądania na potrzeby uzyskiwania dostępu do tych zasobów.

Metody żądań HTTP

Metody żądania są rozróżniane przez kilka czynników, najpierw według ich czasownika , ale także przez następujące cechy:

  • Metoda żądania jest idempotentna , jeśli można ją pomyślnie przetworzyć wiele razy bez zmiany wyniku. Aby uzyskać więcej informacji, zobacz RFC 9110: 9.2.2. Metody idempotentne.
  • Metoda żądania jest przechowywana w pamięci podręcznej, gdy jej odpowiednia odpowiedź może być przechowywana do ponownego użycia. Aby uzyskać więcej informacji, zobacz RFC 9110: Sekcja 9.2.3. Metody i Buforowanie.
  • Metoda żądania jest uznawana za bezpieczną metodę , jeśli nie modyfikuje stanu zasobu. Wszystkie bezpieczne metody są również idempotentne, ale nie wszystkie metody idempotentne są uważane za bezpieczne. Aby uzyskać więcej informacji, zobacz RFC 9110: Sekcja 9.2.1. Sejf metody.
Metoda HTTP Jest idempotentny Jest możliwe do buforowania Jest bezpieczny
GET ✔️ Tak ✔️ Tak ✔️ Tak
POST ❌ Nie ⚠✔ Rarely ❌ Nie
PUT ✔️ Tak ❌ Nie ❌ Nie
PATCH ❌ Nie ❌ Nie ❌ Nie
DELETE ✔️ Tak ❌ Nie ❌ Nie
HEAD ✔️ Tak ✔️ Tak ✔️ Tak
OPTIONS ✔️ Tak ❌ Nie ✔️ Tak
TRACE ✔️ Tak ❌ Nie ✔️ Tak
CONNECT ❌ Nie ❌ Nie ❌ Nie

† Metoda POST jest buforowalna tylko wtedy, gdy istnieją odpowiednie Cache-Control nagłówki lub Expires odpowiedzi. Jest to bardzo rzadkie w praktyce.

Kody stanu HTTP

Platforma .NET zapewnia kompleksową obsługę protokołu HTTP, który odpowiada za większość ruchu internetowego za pomocą polecenia HttpClient. Aby uzyskać więcej informacji, zobacz Make HTTP requests with the HttpClient class (Żądania HTTP za pomocą klasy HttpClient). Aplikacje odbierają błędy protokołu HTTP, przechwytując element HttpRequestException. Kody stanu HTTP są zgłaszane za HttpResponseMessage pomocą HttpResponseMessage.StatusCode metody lub w HttpRequestExceptionHttpRequestException.StatusCode przypadku, gdy wywołana metoda nie zwraca komunikatu odpowiedzi. Aby uzyskać więcej informacji na temat obsługi błędów, zobacz Obsługa błędów HTTP i aby uzyskać więcej informacji na temat kodów stanu, zobacz RFC 9110, HTTP Semantics: Status Codes (Semantyka HTTP: kody stanu).

Kody stanu informacyjnego

Kody stanu informacyjnego odzwierciedlają odpowiedź tymczasową. Większość odpowiedzi tymczasowych, na przykład HttpStatusCode.Continue, jest obsługiwana wewnętrznie HttpClient i nigdy nie jest udostępniana użytkownikowi.

Kod stanu HTTP HttpStatusCode
100 HttpStatusCode.Continue
101 HttpStatusCode.SwitchingProtocols
102 HttpStatusCode.Processing
103 HttpStatusCode.EarlyHints

Kody stanu zakończone powodzeniem

Kody stanu pomyślnego wskazują, że żądanie klienta zostało pomyślnie odebrane, zrozumiane i zaakceptowane.

Kod stanu 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

Kody stanu przekierowania

Kody stanu przekierowania wymagają, aby agent użytkownika wykonał akcję w celu spełnienia żądania. Automatyczne przekierowywanie jest domyślnie włączone, można go zmienić za pomocą HttpClientHandler.AllowAutoRedirect polecenia lub SocketsHttpHandler.AllowAutoRedirect.

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

Kody stanu błędów klienta

Kody stanu błędu klienta wskazują, że żądanie klienta było nieprawidłowe.

Kod stanu 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 Jestem teapotem 🫖
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

Kody stanu błędów serwera

Kody stanu błędu serwera wskazują, że serwer napotkał nieoczekiwany warunek, który uniemożliwił spełnienie żądania.

Kod stanu 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

Zobacz też