Suporte HTTP no .NET
Hypertext Transfer Protocol (ou HTTP) é um protocolo para solicitar recursos de um servidor web. A System.Net.Http.HttpClient classe 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 pelo 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 pode ser armazenado 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 Caching.
- 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
POST
método só pode ser armazenado em cache quando os cabeçalhos apropriadosCache-Control
ouExpires
de resposta estão presentes. Isso é muito incomum na prática.
Códigos de estado HTTP
O .NET fornece suporte abrangente para o protocolo HTTP, que é responsável 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. Os aplicativos recebem erros de protocolo HTTP capturando um HttpRequestExceptionarquivo . Os códigos de status HTTP são relatados com HttpResponseMessage o HttpResponseMessage.StatusCode ou com HttpRequestException o HttpRequestException.StatusCode caso de o método chamado não retornar uma mensagem de resposta. Para obter mais informações sobre tratamento de erros, consulte Tratamento de erros HTTP e, para obter mais informações sobre códigos de status, consulte 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, são tratadas internamente e HttpClient nunca são apresentadas ao usuário.
Código de estado 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 estado 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 está ativado por padrão, pode ser alterado com HttpClientHandler.AllowAutoRedirect ou SocketsHttpHandler.AllowAutoRedirect.
Código de estado 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 estado 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 |