Supporto di HTTP in .NET

Hypertext Transfer Protocol (o HTTP) è un protocollo per richiedere risorse da un server Web. La classe System.Net.Http.HttpClient espone la possibilità di inviare richieste HTTP e ricevere risposte HTTP da una risorsa identificata da un URI. Molti tipi di risorse sono disponibili sul Web e HTTP definisce un set di metodi di richiesta per l'accesso a queste risorse.

Metodi di richiesta HTTP

I metodi di richiesta vengono differenziati in base a diversi fattori, innanzitutto in base al verbo, ma anche alle caratteristiche seguenti:

  • Un metodo di richiesta è idempotente se può essere elaborato più volte senza modificare il risultato. Per altre informazioni, vedere RFC 9110: 9.2.2. Metodi idempotenti.
  • Un metodo di richiesta è memorizzabile nella cache quando la risposta corrispondente può essere archiviata per il riutilizzo. Per altre informazioni, vedere RFC 9110: Sezione 9.2.3. Metodi e memorizzazione nella cache.
  • Un metodo di richiesta viene considerato un metodo sicuro se non modifica lo stato di una risorsa. Tutti i metodi sicuri sono anche idempotenti, ma non tutti i metodi idempotenti sono considerati sicuri. Per altre informazioni, vedere RFC 9110: Sezione 9.2.1. Metodi sicuri.
Metodo HTTP È idempotente È memorizzabile nella cache È sicuro
GET ✔️ Sì ✔️ Sì ✔️ Sì
POST ❌ No ⚠️ Raramente ❌ No
PUT ✔️ Sì ❌ No ❌ No
PATCH ❌ No ❌ No ❌ No
DELETE ✔️ Sì ❌ No ❌ No
HEAD ✔️ Sì ✔️ Sì ✔️ Sì
OPTIONS ✔️ Sì ❌ No ✔️ Sì
TRACE ✔️ Sì ❌ No ✔️ Sì
CONNECT ❌ No ❌ No ❌ No

Il metodo POST è memorizzabile nella cache solo quando sono presenti le intestazioni di risposta Cache-Control o Expires appropriate. Di fatto, nella pratica ciò è molto insolito.

Codici di stato HTTP

.NET offre supporto completo per il protocollo HTTP, che rappresenta la maggior parte del traffico Internet, con HttpClient. Per ulteriori informazioni, consultare Effettuare richieste HTTP con la classe HttpClient. Le applicazioni ricevono gli errori del protocollo HTTP intercettando una HttpRequestException. I codici di stato HTTP vengono segnalati in HttpResponseMessage con HttpResponseMessage.StatusCode o in HttpRequestException con HttpRequestException.StatusCode nel caso in cui il metodo chiamato non restituisca un messaggio di risposta. Per altre informazioni sulla gestione degli errori, vedere Gestione degli errori HTTP e per altre informazioni sui codici di stato, vedere RFC 9110, Semantica HTTP: Codici di stato.

Codici di stato informativi

I codici di stato informativi riflettono una risposta provvisoria. La maggior parte delle risposte provvisorie, ad esempio HttpStatusCode.Continue, viene gestita internamente con HttpClient e non viene mai mostrata all'utente.

Codice di stato HTTP HttpStatusCode
100 HttpStatusCode.Continue
101 HttpStatusCode.SwitchingProtocols
102 HttpStatusCode.Processing
103 HttpStatusCode.EarlyHints

Codici di stato riusciti

I codici di stato con esito positivo indicano che la richiesta del client è stata ricevuta, compresa e accettata correttamente.

Codice di stato 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

Codici di stato di reindirizzamento

I codici di stato di reindirizzamento richiedono all'agente utente di intervenire per soddisfare la richiesta. Il reindirizzamento automatico è attivato per impostazione predefinita, può essere modificato con HttpClientHandler.AllowAutoRedirect o SocketsHttpHandler.AllowAutoRedirect.

Codice di stato HTTP HttpStatusCode
300 HttpStatusCode.MultipleChoices oppure HttpStatusCode.Ambiguous
301 HttpStatusCode.MovedPermanently oppure HttpStatusCode.Moved
302 HttpStatusCode.Found oppure HttpStatusCode.Redirect
303 HttpStatusCode.SeeOther oppure HttpStatusCode.RedirectMethod
304 HttpStatusCode.NotModified
305 HttpStatusCode.UseProxy
306 HttpStatusCode.Unused
307 HttpStatusCode.TemporaryRedirect oppure HttpStatusCode.RedirectKeepVerb
308 HttpStatusCode.PermanentRedirect

Codici di stato degli errori del client

I codici di stato di errore del client indicano che la richiesta del client non è valida.

Codice di stato 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 Sono una teiera 🫖
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

Codici di stato degli errori del server

I codici di stato di errore del server indicano che il server ha rilevato una condizione imprevista che ha impedito di soddisfare la richiesta.

Codice di stato 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

Vedi anche