Podpora PROTOKOLU HTTP v .NET

Protokol HTTP (Hypertext Transfer Protocol) je protokol pro vyžádání prostředků z webového serveru. Třída System.Net.Http.HttpClient zveřejňuje schopnost odesílat požadavky HTTP a přijímat odpovědi HTTP z prostředku identifikovaného identifikátorem URI. Mnoho typů prostředků je k dispozici na webu a HTTP definuje sadu metod požadavků pro přístup k těmto prostředkům.

Metody požadavků HTTP

Metody žádosti jsou diferencovány několika faktory, nejprve jejich slovesem, ale také následujícími vlastnostmi:

  • Metoda požadavku je idempotentní , pokud ji lze úspěšně zpracovat vícekrát beze změny výsledku. Další informace naleznete v dokumentu RFC 9110: 9.2.2. Idempotentní metody.
  • Metoda požadavku je uložená v mezipaměti, pokud je možné uložit odpovídající odpověď pro opakované použití. Další informace naleznete v dokumentu RFC 9110: Oddíl 9.2.3. Metody a Ukládání do mezipaměti
  • Metoda požadavku se považuje za bezpečnou metodu , pokud nezmění stav prostředku. Všechny bezpečné metody jsou také idempotentní, ale ne všechny idempotentní metody jsou považovány za bezpečné. Další informace naleznete v dokumentu RFC 9110: Oddíl 9.2.1. Sejf metody.
Metoda HTTP: Je idempotentní Je možné ukládat do mezipaměti Je bezpečné
GET ✔️ Ano ✔️ Ano ✔️ Ano
POST ❌ Ne ⚠️ Zřídka ❌ Ne
PUT ✔️ Ano ❌ Ne ❌ Ne
PATCH ❌ Ne ❌ Ne ❌ Ne
DELETE ✔️ Ano ❌ Ne ❌ Ne
HEAD ✔️ Ano ✔️ Ano ✔️ Ano
OPTIONS ✔️ Ano ❌ Ne ✔️ Ano
TRACE ✔️ Ano ❌ Ne ✔️ Ano
CONNECT ❌ Ne ❌ Ne ❌ Ne

†Toto POST metoda je uložena pouze v mezipaměti, pokud jsou k dispozici příslušné Cache-Control hlavičky nebo Expires hlavičky odpovědi. To je v praxi velmi neobvyklé.

Stavové kódy HTTP

.NET poskytuje komplexní podporu pro protokol HTTP, který účty pro většinu internetového provozu, s HttpClient. Další informace naleznete v tématu Vytváření požadavků HTTP pomocí třídy HttpClient. Aplikace přijímají chyby protokolu HTTP zachytáváním HttpRequestException. Stavové kódy HTTP jsou hlášeny HttpResponseMessage buď v případě HttpRequestExceptionHttpResponseMessage.StatusCodeHttpRequestException.StatusCode, že volána metoda nevrací zprávu odpovědi. Další informace o zpracování chyb naleznete v tématu Zpracování chyb HTTP a další informace o stavových kódech, viz RFC 9110, sémantika HTTP: Stavové kódy.

Informační stavové kódy

Informační stavové kódy odrážejí dočasnou odpověď. Většina dočasných odpovědí se například HttpStatusCode.Continuezpracovává interně a HttpClient nikdy se uživateli nezobrazuje.

Kód stavu HTTP HttpStatusCode
100 HttpStatusCode.Continue
101 HttpStatusCode.SwitchingProtocols
102 HttpStatusCode.Processing
103 HttpStatusCode.EarlyHints

Úspěšné stavové kódy

Úspěšné stavové kódy označují, že žádost klienta byla úspěšně přijata, pochopit a přijata.

Kód stavu 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

Stavové kódy přesměrování

Stavové kódy přesměrování vyžadují, aby uživatelský agent podnikl akci pro splnění požadavku. Automatické přesměrování je ve výchozím nastavení zapnuté, lze ho změnit pomocí HttpClientHandler.AllowAutoRedirect nebo SocketsHttpHandler.AllowAutoRedirect.

Kód stavu HTTP HttpStatusCode
300 HttpStatusCode.MultipleChoices nebo HttpStatusCode.Ambiguous
301 HttpStatusCode.MovedPermanently nebo HttpStatusCode.Moved
302 HttpStatusCode.Found nebo HttpStatusCode.Redirect
303 HttpStatusCode.SeeOther nebo HttpStatusCode.RedirectMethod
304 HttpStatusCode.NotModified
305 HttpStatusCode.UseProxy
306 HttpStatusCode.Unused
307 HttpStatusCode.TemporaryRedirect nebo HttpStatusCode.RedirectKeepVerb
308 HttpStatusCode.PermanentRedirect

Stavové kódy chyb klienta

Stavové kódy chyb klienta označují, že požadavek klienta je neplatný.

Kód stavu 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 Jsem čajovýpot 🫖
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

Stavové kódy chyb serveru

Stavové kódy chyb serveru označují, že server zjistil neočekávanou podmínku, která mu zabránila v plnění požadavku.

Kód stavu 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

Viz také