¿Qué son las respuestas HTTP?


Lección 3 / 8

¿Qué son las respuestas HTTP?

Http

Las respuestas HTTP son mensajes enviados por el servidor en respuesta a una solicitud enviada por el cliente. Tienen una estructura específica y se caracterizan por el código de respuesta (o status code) que permite comprender si la solicitud fue exitosa o no.

Estructura respuesta HTTP

Una respuesta HTTP se caracteriza por:

  • el status code de la respuesta
  • el status text de la respuesta, un texto breve, puramente informativo, que ofrece una descripción textual y human-readable del status code
  • cero o más header que caracterizan la respuesta
  • un body (opzional) que contiene los datos asociados al recurso solicitado

Un ejemplo de respuesta HTTP es el siguiente:

HTTP/2 201 Created
Access-Control-Allow-Origin: *
Date: Mon, 16 Jan 2023 19:40:32 GMT
Content-Type: application/json
Content-Length: 131
Cache-Control: private, no-cache, no-store, must-revalidate
Strict-Transport-Security: max-age=15724800; includeSubDomains

{
  "id": "fef10dff-d5ad-4d60-b28a-b3fb6c12edf7",
  "foo": "bar"
}

En esta respuesta, en la primera línea se indica el status code o el status text, las siguientes contienen los header que caracterizan el contenido de la respuesta. Después de una línea en blanco, el recurso solicitado está presente (en este caso un archivo JSON).

Status code HTTP

Los códigos de respuesta HTTP permiten al cliente comprender si una solicitud HTTP específica tuvo éxito y cómo. De hecho, si consideramos que un cliente HTTP es, después de todo, una aplicación genérica (no solo un navegador web, sino también una app para un smartphone que llama a un servidor API), saber qué códigos de respuesta pueden recibir potencialmente nos permite instruir a nuestra aplicación para que se comporte de formas específicas según el código de respuesta recibido.

Los status code HTTP son números de tres cifras, la prima cifra de los cuales indica a qué clase pertenece el status code. En particular:

  • 1xx (informativo) - la solicitud ha sido recibida, elaboración en curso
  • 2xx (éxito) - la solicitud ha sido recibida, extendida y aceptada con éxito
  • 3xx (redireccionamiento) - se deben tomar medidas adicionales para completar la solicitud
  • 4xx (error del client) - la solicitud contiene una sintaxis incorrecta o no se puede cumplir
  • 5xx (error del server) - el server no pudo complir con una solicitud aparentemente válida

Cualquier número entre 100 y 599 es, por lo tanto, un status code válido; algunos valores específicos se han codificado en la especificación HTTP para que tengan un significado particular, que veremos en un momento.

Los servidores, por otro lado, pueden implementar sus propios códigos de respuesta, siempre que sean válidos y estén en línea con la clase a la que pertenecen. Por ejemplo, un servidor podría responder con:

HTTP/2 481 TheCatIsOnTheTable
Access-Control-Allow-Origin: *
Date: Mon, 16 Jan 2023 19:40:32 GMT

El status code 481 no está definido en la HTTP específica, si no que pertenece a la clase “error del client”. El cliente puede entonces:

  • no saber de este error específico, pero tratándose de un código 4xx tendría que poderlo gestionar como un error genérico lato client
  • conocer el significado de este error específico y en consecuencia implementar un comportamiento bien definido con respecto a los demás 4xx

Obviamente, el server tendría que documentar que status code gestiona y que significado darle a cada uno (incluso si hay una explicación míninma en el status text).

Los códigos de respuesta más frecuentes e importantes definidos por la especificación HTTP son los siguientes:

200 OK

El código de respuesta 200 OK indica un éxito genérico de la solicitud. El significado exacto de "éxito" depende del método HTTP de la solicitud, así como del header y el body de la respuesta. Por ejemplo, el body de un 200 OK después de un GET será el mismo recurso solicitado, el de un 200 OK después de un POST podría contener información de estado o el resultado obtenido de la acción correspondiente a la solicitud.

NOTA: el protocolo HTTP es un protocolo de comunicación, dice cómo intercambiar información, no cuáles. Con el tiempo, se han formalizado algunas mejores prácticas en el uso de métodos de solicitud, códigos de respuesta, contenido del body y formato de URI de recursos, pero esto va más allá de la especificación HTTP en sí. Para obtener más informació consulta https://en.wikipedia.org/wiki/Representational_state_transfer

201 Created

La solicitud fue exitosa y se creó un nuevo recurso (cuyo contenido o URI suele estar presente en el body). Es la respuesta típica después de un POST o PUT exitoso.

202 Accepted

El código de respuesta 202 Aceppted indica que la solicitud ha sido aceptada, pero aún no se ha procesado. Ten en cuenta que, dado que HTTP es un protocolo stateless, el servidor no enviará de forma asíncrona otra respuesta para indicar el éxito. Puede ser útil, por ejemplo, sobre los recursos a contactar para iniciar un proceso batch.

204 No Content

El código respuesta 204 No Content indica que no hay contenidos para enviar como respuesta a la solicitud, pero los header pueden ser útiles. Por ejemplo, el cliente puede actualizar los header almacenados en caché para este recurso con otros nuevos.

301 Moved Permanently

El código respuesta 301 Moved Permanently, indica que la URL del recurso solicitado ha sido cambiado permanentemente. La nueva URL se proporciona en la respuesta a través del header Location:

NOTA: esto quiere decir que el client tendrá que repetir la solicitud, pero cambiando recurso con el proporcionado por el servidor.

304 Not Modified

El código de respuesta 304 Not Modified comunica al client que la respuesta no ha sido modificada, entonces el client puede continuar a utilizar la misma versión de la respuesta memorizada en el caché. 

308 Permanent Redirect

El código de respuesta 308 Permanent Redirect indica que el recurso se encuentra ahora de manera permanente en otro URI, especificado en el header Location: de la respuesta. No se permite el cambio de método de POST a GET.

NOTA: informamos este código para resaltar que las especificaciones HTTP han evolucionado con el tiempo, también para adaptarse al uso y las implementaciones. Aunque, de hecho, puede parecer lo mismo que 301 Moved Permanently, la diferencia entre los dos está en la concesión del cambio de método. De hecho, en el pasado, algunos navegadores web y servidores web habían implementado un comportamiento personalizado por el cual, después de un POST exitoso, se proporcionaba una respuesta 301 con el URI para pasar a mostrar al usuario otro contenido. De ahí la necesidad de un nuevo código de respuesta que fuera más específico y menos malentendido.

401 Unauthorized

Respecto al código de respuesta 401 Unauthorized es necesario precisar que, aunque el standard HTTP específico “no autorizado”, semánticamente esta respuesta significa “no autenticado”. Esto quiere decir que el client tiene que autenticarse para obtener la respuesta requerida.

403 Forbidden

El código de respuesta 403 Forbidden señala que el cliente no tiene derecho de acceso al contenido, es decir, no está autorizado; entonces, el server se niega a proporcionar el recurso solicitado. A diferencia de 401 Unauthorized, la identidad del cliente es conocida por el server.

404 Not Found

El famoso código de respuesta 404 Not Found, que conocemos todos, nos señala que el server no consigue encontrar el recurso solicitado.

El significado exacto de este código también depende del contexto en el que se realizó la solicitud. De hecho, si pensamos en un navegador, significa que se ha solicitado un recurso que no está presente (ejemplo: el navegador está pidiendo al servidor los archivos de imagen que ha encontrado en el HTML de una página web, pero en el servidor no se ha cargado un determinado archivo JPEG, o se ha cometido un error en el contenido HTML).

Si, por el contrario, estamos en el contexto de la API, también podría significar que el punto final es formalmente válido, pero el recurso no existe (GET https://api.ecommerce.com/order/3452 si hay no hay pedido con id 3452).

410 Gone

El código de respuesta 401 Gone es similar al anterior (el server no puede devolver el recurso), pero con diferente motivación.

Esta respuesta se envía cuando el contenido requerido ha sido eliminado definitivamente del server. Los client tendrían que eliminar sus cachés y los link al recurso.

Este código de error es muy importante para las estrategias SEO, ya que indica a los crawler que ese recurso puede ser eliminado por las SERP.

500 Internal Server Error

El código de respuesta 500 Internal Server Error señala, claramente, que el server ha encontrado una situación que no sabe como gestionar.

503 Service Unavailable

El código de respuesta 503 Service Unavailable indica que el server momentáneamente no puede manejar la solicitud, debido a una sobrecarga temporal o debido a un mantenimiento programado.

Esta respuesta debe usarse para condiciones temporales y puede indicar a través del header Retry-After después del tiempo estimado antes de que se restablezca el servicio.

Referencias

Para obtener más información sobre estos y otros status code HTTP:

Guía Laravel en español 1 ¿Qué es HTTP? 2 ¿Qué son las solicitudes HTTP? 3 ¿Qué son las respuestas HTTP? 4 Administrador de dependencias Composer 5 Laravel, el framework para los artesanos de la web 6 El ecosistema Laravel 7 Estructura de un proyecto Laravel 8 Laravel y el ciclo de vida de las solicitudes

© 2022 Aulab. Todos los derechos reservados • P.IVA: IT07647440721 • Política de privacidad