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ą odpowiednieCache-Control
nagłówki lubExpires
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.
Kody stanu błędów serwera
Kody stanu błędu serwera wskazują, że serwer napotkał nieoczekiwany warunek, który uniemożliwił spełnienie żądania.