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 przez ich czasownik , 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 keszowalne, gdy odpowiednią odpowiedź można przechowywać 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 metody bezpiecznego są również idempotentne, ale nie wszystkie metody idempotentne są uznawane za bezpieczne . Aby uzyskać więcej informacji, zobacz RFC 9110: Sekcja 9.2.1. Bezpieczne metody.
Metoda HTTP | Jest idempotentny | Jest buforowalne | Jest bezpieczny |
---|---|---|---|
GET |
✔️ Tak | ✔️ Tak | ✔️ Tak |
POST |
❌ nie | ️ ⚠rzadko † | ❌ 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 nagłówki odpowiedziCache-Control
lubExpires
. 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 z HttpClient. Aby uzyskać więcej informacji, zobacz Tworzenie żądań HTTP za pomocą klasy HttpClient. Aplikacje odbierają błędy protokołu HTTP, przechwytując obiekt HttpRequestException. Kody stanu HTTP są zgłaszane w HttpResponseMessage z HttpResponseMessage.StatusCode lub w HttpRequestException z HttpRequestException.StatusCode w 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 HTTPi aby uzyskać więcej informacji na temat kodów stanu, zobacz RFC 9110, Http Semantics: Status Codes.
Informacyjne kody stanu
Kody stanu informacyjnego odzwierciedlają odpowiedź tymczasową. Większość odpowiedzi tymczasowych, na przykład HttpStatusCode.Continue, jest obsługiwana wewnętrznie z 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 powodzenia
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 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.
Zobacz też
- Wykonuj żądania HTTP za pomocą klasy HttpClient
- Fabryka klienta HTTP w .NET
- Wskazówki dotyczące używania HttpClient
- ulepszenia sieci .NET