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 apropriadosCache-Control
ouExpires
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ó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 |