Compatibilidad con HTTP en .NET
El Protocolo de transferencia de hipertexto (o HTTP) es un protocolo para solicitar recursos de un servidor web. La clase System.Net.Http.HttpClient expone la posibilidad de enviar solicitudes HTTP y recibir respuestas HTTP de un recurso identificado por un URI. Hay muchos tipos de recursos disponibles en la Web y HTTP define un conjunto de métodos de solicitud para acceder a estos recursos.
Métodos de solicitud HTTP
Los métodos de solicitud se diferencian por varios factores, primero por su verbo, pero también por las siguientes características:
- Un método de solicitud es idempotente si se puede procesar correctamente varias veces sin cambiar el resultado. Para más información, consulte RFC 9110: 9.2.2. Métodos idempotentes.
- Un método de solicitud se puede almacenar en caché cuando su respuesta correspondiente se puede almacenar para utilizarse de nuevo. Para más información, consulte RFC 9110: Sección 9.2.3. Métodos y almacenamiento en caché.
- Un método de solicitud se considera un método seguro si no modifica el estado de un recurso. Todos los métodos seguros también son idempotentes, pero no todos los métodos idempotentes se consideran seguros. Para más información, consulte RFC 9110: Sección 9.2.1. Métodos seguros.
HTTP method | Es idempotente | Se puede almacenar en caché | Es seguro |
---|---|---|---|
GET |
✔️ Sí | ✔️ Sí | ✔️ Sí |
POST |
❌ No | ⚠†Casi nunca | ❌ 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 |
† El método
POST
solo se puede almacenar en caché cuando están presentes los encabezados de respuestaCache-Control
oExpires
adecuados. Esto es muy poco común en la práctica.
Códigos de estado HTTP
.NET proporciona compatibilidad completa con el protocolo HTTP, lo que tiene en cuenta la mayoría del tráfico de Internet, con HttpClient. Para más información, consulte Realización de solicitudes HTTP con la clase HttpClient. Las aplicaciones reciben errores de protocolo HTTP al capturar una excepción HttpRequestException. Los códigos de estado HTTP se notifican en HttpResponseMessage con HttpResponseMessage.StatusCode o en HttpRequestException con HttpRequestException.StatusCode en caso de que el método llamado no devuelva un mensaje de respuesta. Para más información sobre el control de errores, consulte Control de errores HTTP; y, para más información sobre los códigos de estado, consulte RFC 9110, Semántica HTTP: Códigos de estado.
Códigos de estado informativos
Los códigos de estado informativos reflejan una respuesta provisional. La mayoría de las respuestas provisionales, por ejemplo HttpStatusCode.Continue, se administran internamente con HttpClient y nunca se exponen al usuario.
Código de estado HTTP | HttpStatusCode |
---|---|
100 |
HttpStatusCode.Continue |
101 |
HttpStatusCode.SwitchingProtocols |
102 |
HttpStatusCode.Processing |
103 |
HttpStatusCode.EarlyHints |
Códigos de estado correctos
Los códigos de estado correctos indican que la solicitud del cliente se recibió correctamente, y que se entendió y aceptó.
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 estado de redireccionamiento
Los códigos de estado de redireccionamiento requieren que el agente de usuario tome medidas para satisfacer la solicitud. El redireccionamiento automático está activado de forma predeterminada, pero se puede cambiar con HttpClientHandler.AllowAutoRedirect o SocketsHttpHandler.AllowAutoRedirect.
Código de estado HTTP | HttpStatusCode |
---|---|
300 |
HttpStatusCode.MultipleChoices o HttpStatusCode.Ambiguous |
301 |
HttpStatusCode.MovedPermanently o HttpStatusCode.Moved |
302 |
HttpStatusCode.Found o HttpStatusCode.Redirect |
303 |
HttpStatusCode.SeeOther o HttpStatusCode.RedirectMethod |
304 |
HttpStatusCode.NotModified |
305 |
HttpStatusCode.UseProxy |
306 |
HttpStatusCode.Unused |
307 |
HttpStatusCode.TemporaryRedirect o HttpStatusCode.RedirectKeepVerb |
308 |
HttpStatusCode.PermanentRedirect |
Códigos de estado de error HTTP
Los códigos de estado de error del cliente indican que la solicitud del cliente no era válida.
Códigos de estado de error del servidor
Los códigos de estado de error del servidor indican que el servidor encontró una condición inesperada que impedía que se completara la solicitud.
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 |