Compartir a través de


Compatibilidad con HTTP en .NET

El Protocolo de transferencia de hipertexto (o HTTP) es un protocolo para solicitar recursos desde un servidor web. La System.Net.Http.HttpClient clase expone la capacidad de enviar solicitudes HTTP y recibir respuestas HTTP de un recurso identificado por un URI. Muchos tipos de recursos están 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 a través de 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 obtener más información, consulte RFC 9110: 9.2.2. Métodos idempotentes.
  • Un método de solicitud se puede almacenar en caché cuando se puede almacenar su respuesta correspondiente para su reutilización. Para obtener 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 obtener más información, vea RFC 9110: Sección 9.2.1. Métodos seguros.
Método HTTP Es idempotente Es almacenable en caché Es seguro
GET ✔️ Sí ✔️ Sí ✔️ Sí
POST ❌ No ⚠️ Raramente ❌ 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 POST método solo se puede almacenar en caché cuando están presentes los encabezados de respuesta adecuados Cache-Control o Expires. Esto es muy poco común en la práctica.

Códigos de estado HTTP

.NET proporciona compatibilidad completa con el protocolo HTTP, que representa la mayor parte del tráfico de Internet, con el HttpClient. Para obtener más información, consulte Realización de solicitudes HTTP con la clase HttpClient. Las aplicaciones reciben errores de protocolo HTTP detectando un HttpRequestException. Los códigos de estado HTTP se notifican en HttpResponseMessage con el HttpResponseMessage.StatusCode o en HttpRequestException con el HttpRequestException.StatusCode en caso de que el método llamado no devuelva un mensaje de respuesta. Para obtener más información sobre el control de errores, consulte Control de errores HTTP y para obtener más información sobre los códigos de estado, consulte RFC 9110, SEMántica HTTP: Códigos de estado.

Códigos de estado informativo

Los códigos de estado informativo reflejan una respuesta provisional. La mayoría de las respuestas provisionales, por ejemplo HttpStatusCode.Continue, se controlan 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 ha recibido, comprendido y aceptado correctamente.

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 cumplir la solicitud. El redireccionamiento automático está activado de forma predeterminada, 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 de cliente

Los códigos de estado de error del cliente indican que la solicitud del cliente no era válida.

Código de estado 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 Soy una tetera 🫖?
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 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 cumpla 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

Consulte también