Suporte a HTTP no .NET

O HTTP (ou Protocolo de Transferência de Hipertexto) é um protocolo para solicitar recursos de um servidor Web. A classe System.Net.Http.HttpClient expõe a capacidade de enviar solicitações HTTP e receber respostas HTTP de um recurso identificado por um URI. Muitos tipos de recursos estão disponíveis na Web, e o HTTP define um conjunto de métodos de solicitação para acessar esses recursos.

Métodos de solicitação HTTP

Os métodos de solicitação são diferenciados por meio de vários fatores, primeiro pelo verbo, mas também pelas seguintes características:

  • Um método de solicitação será idempotente se puder ser processado com êxito várias vezes sem alterar o resultado. Para obter mais informações, confira RFC 9110: 9.2.2. Métodos idempotentes.
  • Um método de solicitação pode ser armazenável em cache quando sua resposta correspondente pode ser armazenada para reutilização. Para obter mais informações, consulte RFC 9110: Seção 9.2.3. Métodos e cache.
  • Um método de solicitação será considerado um método seguro se ele não modifica o estado de um recurso. Todos os métodos seguros também são idempotentes, mas nem todos os métodos idempotentes são considerados seguros. Para obter mais informações, confira RFC 9110: Seção 9.2.1. Métodos seguros.
Método HTTP É idempotente Pode ser armazenado em cache É seguro
GET ✔️ Sim ✔️ Sim ✔️ Sim
POST ❌ Não ⚠️ Raramente ❌ Não
PUT ✔️ Sim ❌ Não ❌ Não
PATCH ❌ Não ❌ Não ❌ Não
DELETE ✔️ Sim ❌ Não ❌ Não
HEAD ✔️ Sim ✔️ Sim ✔️ Sim
OPTIONS ✔️ Sim ❌ Não ✔️ Sim
TRACE ✔️ Sim ❌ Não ✔️ Sim
CONNECT ❌ Não ❌ Não ❌ Não

O método POST só pode ser armazenado em cache quando os cabeçalhos apropriados Cache-Control ou Expires de resposta estiverem presentes. Isso é muito incomum na prática.

Códigos de status HTTP

O .NET fornece suporte abrangente ao protocolo HTTP, que representa a maior parte do tráfego da Internet, com HttpClient. Para obter mais informações, confira Fazer solicitações HTTP com a classe HttpClient. Aplicativos recebem erros de protocolo HTTP capturando um HttpRequestException. Os códigos de status HTTP são relatados no HttpResponseMessage com o HttpResponseMessage.StatusCode ou no HttpRequestException com o HttpRequestException.StatusCode caso o método chamado não retorne uma mensagem de resposta. Para obter mais informações sobre tratamento de erros, confira Tratamento de erros HTTP e para obter mais informações sobre códigos de status, confira RFC 9110, Semântica HTTP: Códigos de status.

Códigos de status informativos

Os códigos de status informativos refletem uma resposta provisória. A maioria das respostas provisórias, por exemplo, HttpStatusCode.Continue, é tratada internamente com HttpClient e nunca é exibida para o usuário.

Código de status HTTP HttpStatusCode
100 HttpStatusCode.Continue
101 HttpStatusCode.SwitchingProtocols
102 HttpStatusCode.Processing
103 HttpStatusCode.EarlyHints

Códigos de status bem-sucedidos

Os códigos de status bem-sucedidos indicam que a solicitação do cliente foi recebida, compreendida e aceita com êxito.

Código de status 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

Códigos de status de redirecionamento

Os códigos de status de redirecionamento exigem que o agente do usuário tome medidas para atender à solicitação. O redirecionamento automático é ativado por padrão, pode ser alterado com HttpClientHandler.AllowAutoRedirect ou SocketsHttpHandler.AllowAutoRedirect.

Código de status HTTP HttpStatusCode
300 HttpStatusCode.MultipleChoices ou HttpStatusCode.Ambiguous
301 HttpStatusCode.MovedPermanently ou HttpStatusCode.Moved
302 HttpStatusCode.Found ou HttpStatusCode.Redirect
303 HttpStatusCode.SeeOther ou HttpStatusCode.RedirectMethod
304 HttpStatusCode.NotModified
305 HttpStatusCode.UseProxy
306 HttpStatusCode.Unused
307 HttpStatusCode.TemporaryRedirect ou HttpStatusCode.RedirectKeepVerb
308 HttpStatusCode.PermanentRedirect

Códigos de status de erro do cliente

Os códigos de status de erro do cliente indicam que a solicitação do cliente era inválida.

Código de status 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 Eu sou um bule 🫖
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

Códigos de status de erro do servidor

Os códigos de status de erro do servidor indicam que o servidor encontrou uma condição inesperada que o impediu de atender à solicitação.

Código de status 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

Confira também