Saltar al contenido
Programer

Lección 4 de 1512 min

HTTP: peticiones y respuestas

Métodos, cabeceras y códigos de estado, probados contra un servidor de mentira.

HTTP (HyperText Transfer Protocol) es el idioma en el que hablan navegadores y servidores. Es una conversación muy simple: el cliente envía una petición y el servidor contesta con una respuesta. Ni más ni menos.

Anatomía de una petición

En HTTP/1.1, una petición es literalmente texto. Tiene tres partes: una primera línea con el método, la ruta y la versión; unas cabeceras con información adicional, y un cuerpo opcional con datos.

Petición
GET /api/libros/2 HTTP/1.1        ← línea de petición: método, ruta, versión
Host: api.ejemplo.com             ← cabeceras: pares nombre: valor
Accept: application/json
Accept-Language: es
                                  ← línea en blanco: fin de las cabeceras
                                  ← cuerpo (GET no lleva)

Anatomía de una respuesta

La respuesta sigue la misma estructura, pero su primera línea lleva el código de estado: un número de tres cifras que resume cómo ha ido.

Respuesta
HTTP/1.1 200 OK                     ← línea de estado: versión, código, frase
Content-Type: application/json      ← cabeceras
Cache-Control: max-age=60
                                    ← línea en blanco
{ "id": 2, "titulo": "Pedro Páramo" }  ← cuerpo

Nota

HTTP/2 y HTTP/3, las versiones modernas, viajan en formato binario y son mucho más eficientes, pero el significado es el mismo: métodos, rutas, cabeceras, códigos y cuerpo. Lo que aprendas aquí vale para todas.

Métodos: qué quieres hacer

El método indica la intención de la petición. Los más usados son:

MétodoIntenciónSeguroIdempotente
GETObtener un recursoSíSí
POSTCrear algo o lanzar una acciónNoNo
PUTReemplazar un recurso completoNoSí
PATCHModificar parte de un recursoNoNo necesariamente
DELETEBorrar un recursoNoSí
  • Seguro: no modifica nada en el servidor. Por eso los navegadores pueden precargar enlaces con GET sin miedo.
  • Idempotente: enviarlo una vez o diez deja el servidor igual. Si se corta la conexión, se puede reintentar sin riesgo. Un POST repetido, en cambio, podría hacer dos pedidos.

Pruébalo contra un servidor de mentira

Esta API de libros funciona entera dentro de tu navegador. Cambia el método, la ruta, el token o el cuerpo, y lee qué responde. Intenta descubrir los once códigos de estado del reto.

Interactivo

Un servidor de mentira

Una API de libros que vive en tu navegador. Construye peticiones, envíalas y lee la respuesta.

Petición
Pulsa «Enviar» para mandar tu primera petición.
Respuesta
…

Reto: descubre todos los códigos (0/11)

  • 200 sin descubrir
  • 201 sin descubrir
  • 204 sin descubrir
  • 301 sin descubrir
  • 400 sin descubrir
  • 401 sin descubrir
  • 403 sin descubrir
  • 404 sin descubrir
  • 405 sin descubrir
  • 422 sin descubrir
  • 503 sin descubrir

Base de datos del servidor

  • #1 Rayuela · Julio Cortázar
  • #2 Pedro Páramo · Juan Rulfo
  • #3 Ficciones · Jorge Luis Borges

Códigos de estado

La primera cifra del código dice a qué familia pertenece:

FamiliaSignificadoLos más comunes
1xxInformación: sigue, voy procesando101 cambio de protocolo
2xxÉxito200 OK · 201 creado · 204 sin contenido
3xxRedirección: está en otro sitio301 movido para siempre · 304 no ha cambiado
4xxError del cliente400 · 401 · 403 · 404 · 429 demasiadas peticiones
5xxError del servidor500 error interno · 503 no disponible

Cabeceras que verás a menudo

  • Content-Type: el formato del cuerpo, como text/html o application/json.
  • Accept: los formatos que el cliente sabe interpretar.
  • Authorization: credenciales, como un token.
  • Cache-Control: si la respuesta puede guardarse en caché y durante cuánto tiempo.
  • Set-Cookie y Cookie: el servidor pide al navegador que guarde un dato, y el navegador lo devuelve en cada petición siguiente.
  • Location: adónde ir tras una redirección o dónde está un recurso recién creado.

Atención

HTTP es un protocolo sin estado: cada petición es independiente y el servidor no recuerda las anteriores. Cuando una web «sabe» que has iniciado sesión es porque tu navegador le envía, en cada petición, una cookie o un token que te identifica.

Comprueba lo aprendido

Cuestionario

Responde las 5 preguntas para completar la lección.

  1. 1.Alguien pide una página que no existe en tu servidor. ¿Qué código deberías devolver?

  2. 2.¿En qué se diferencian 401 y 403?

  3. 3.¿Cuál de estos métodos NO es idempotente?

  4. 4.¿Qué familia de códigos indica que el problema está en el servidor?

  5. 5.¿Qué significa que HTTP sea un protocolo «sin estado»?