Suporte HTTP no .NET
Hypertext Transfer Protocol (ou HTTP) é 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 vários fatores, primeiro através do verbo mas também pelas seguintes características:
- Um método de solicitação é idempotente se puder ser processado com sucesso várias vezes sem alterar o resultado. Para obter mais informações, consulte RFC 9110: 9.2.2. Métodos idempotentes.
- Um método de solicitação é 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 é considerado um método seguro se não modificar 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, consulte RFC 9110: Seção 9.2.1. Métodos seguros.
Método HTTP | É idempotente | É armazenável 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 de respostaCache-Control
ouExpires
apropriados estão presentes. Isso é muito incomum na prática.
Códigos de status HTTP
O .NET fornece suporte abrangente para o protocolo HTTP, que responde pela maior parte do tráfego da Internet, com o HttpClient. Para obter mais informações, consulte Fazer solicitações HTTP com a classe HttpClient. As aplicações recebem erros de protocolo HTTP capturando um HttpRequestException. Os códigos de status HTTP são relatados em HttpResponseMessage com o HttpResponseMessage.StatusCode ou em HttpRequestException com o HttpRequestException.StatusCode caso o método chamado não retorne uma mensagem de resposta. Para obter mais informações sobre o tratamento de erros HTTP, consulte e, para mais informações sobre códigos de estado, consulte RFC 9110, HTTP Semantics: Status Codes.
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, são tratadas internamente com HttpClient e nunca são apresentadas ao utilizador.
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 sucesso.
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 estado 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 está 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 estado 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 |