Skip to content

Protocolo HTTP: el "lenguaje de comunicación" entre frontend y backend

🎯 Pregunta clave

¿Cómo funciona HTTP? Es como preguntar: ¿cómo dialogan dos personas? Se necesita acordar un idioma, una gramática y unas reglas de conversación. HTTP es el "protocolo de diálogo" entre frontend y backend.


0. La esencia de HTTP

HTTP (HyperText Transfer Protocol) es el protocolo fundamental de comunicación entre frontend y backend.

Elemento del diálogoEquivalente HTTPDescripción
IdiomaProtocolo HTTPUn lenguaje que ambas partes entienden
GramáticaFormato de petición/respuestaCómo "hablar"
FlujoModelo petición-respuestaUno pregunta, el otro responde
FinalizaciónColgarCierre de conexión TCP

1. Historia de HTTP

HTTP ha experimentado múltiples actualizaciones importantes desde su nacimiento en 1991.

🌐HTTP Protocol Demo
📤HTTP request
GET/api/users/123HTTP/1.1
Host:api.example.com
User-Agent:Mozilla/5.0
Accept:application/json
Authorization:Bearer xxx
TCP connection
📥HTTP response
HTTP/1.1200OK
Content-Type:application/json
Content-Length:156
Cache-Control:max-age=3600
{ "id": 123, "name": "Alice", "email": "alice@example.com" }

1.1 Comparación de versiones

VersiónAñoMejora principalCaracterística típica
HTTP/0.91991Solo soporta GETTexto plano, solo petición, sin cabeceras de respuesta
HTTP/1.01996Añade POST/HEADUna conexión TCP por petición
HTTP/1.11997Conexión persistenteKeep-Alive, múltiples peticiones por conexión
HTTP/22015MultiplexaciónTramas binarias, compresión de cabeceras
HTTP/32022Basado en QUICTransporte UDP, resuelve el bloqueo de cabeza de línea

💡 ¿Por qué necesitamos HTTP/2?

Aunque HTTP/1.1 soporta conexiones persistentes, las peticiones deben enviarse en serie (la respuesta de la petición anterior debe llegar antes de enviar la siguiente). HTTP/2 resuelve este problema mediante multiplexación, permitiendo enviar múltiples peticiones simultáneamente.


2. Estructura de una petición HTTP

2.1 Línea de petición

http
GET /api/users/123 HTTP/1.1

Contiene tres partes:

  • Método: GET, POST, PUT, DELETE, etc.
  • URL: la ruta del recurso solicitado
  • Versión: HTTP/1.1 o HTTP/2

2.2 Cabeceras de petición

http
Host: api.example.com
User-Agent: Mozilla/5.0
Accept: application/json
Authorization: Bearer xxx
Content-Type: application/json
Content-Length: 45

Cabeceras de petición comunes:

CabeceraDescripciónEjemplo
HostDominio del servidorapi.example.com
User-AgentInformación del clienteMozilla/5.0
AcceptTipo de respuesta aceptadoapplication/json
AuthorizationInformación de autenticaciónBearer token
Content-TypeTipo del cuerpo de la peticiónapplication/json

2.3 Cuerpo de la petición

json
{
  "name": "Zhang San",
  "email": "zhangsan@example.com"
}

Solo los métodos POST, PUT, PATCH tienen cuerpo de petición.


3. Estructura de una respuesta HTTP

3.1 Línea de estado

http
HTTP/1.1 200 OK

Contiene tres partes:

  • Versión: HTTP/1.1
  • Código de estado: 200, 404, 500, etc.
  • Texto de estado: OK, Not Found, etc.

3.2 Cabeceras de respuesta

http
Content-Type: application/json
Content-Length: 156
Cache-Control: max-age=3600
Set-Cookie: session=xxx; HttpOnly

Cabeceras de respuesta comunes:

CabeceraDescripciónEjemplo
Content-TypeTipo del cuerpo de la respuestaapplication/json
Content-LengthTamaño del cuerpo de la respuesta156
Cache-ControlEstrategia de cachémax-age=3600
Set-CookieEstablecer Cookiesession=xxx

3.3 Cuerpo de la respuesta

json
{
  "code": 0,
  "data": {
    "id": 123,
    "name": "Zhang San"
  }
}

4. Métodos HTTP en detalle

MétodoPropósitoCuerpoIdempotenciaSeguridad
GETObtener recursoNo
POSTCrear recursoNoNo
PUTActualización completaNo
PATCHActualización parcialNoNo
DELETEEliminar recursoNoNo
HEADObtener cabecerasNo
OPTIONSConsultar métodos soportadosNo

4.1 GET vs POST

CaracterísticaGETPOST
Ubicación de parámetrosQuery params en URLCuerpo de la petición
CachéCacheableNo cacheable por defecto
MarcadorSe puede añadir a marcadoresNo
HistorialSe guarda en el historial del navegadorNo se guarda
Longitud de datosLimitada (longitud de URL)Sin límite
SeguridadParámetros visibles en la URLParámetros en el cuerpo

💡 ¿Cuándo usar GET/POST?

  • GET: consultar, obtener datos
  • POST: crear, enviar datos
  • PUT: actualización completa (reemplazar todo el recurso)
  • PATCH: actualización parcial (modificar solo campos específicos)
  • DELETE: eliminar recurso

5. Códigos de estado HTTP

5.1 Clasificación de códigos de estado

ClaseDescripciónCódigos típicos
2xxÉxito200 OK, 201 Created, 204 No Content
3xxRedirección301 Permanente, 302 Temporal, 304 No modificado
4xxError del cliente400 Parámetros incorrectos, 401 No autenticado, 404 No encontrado
5xxError del servidor500 Error interno, 503 No disponible

5.2 Códigos de estado comunes

CódigoDescripciónCaso de uso
200 OKPetición exitosaGET, PUT exitosos
201 CreatedCreación exitosaPOST para crear recurso exitoso
204 No ContentSin contenidoDELETE exitoso
301 Moved PermanentlyRedirección permanenteURL cambiada permanentemente
302 FoundRedirección temporalURL cambiada temporalmente
304 Not ModifiedNo modificadoCaché válida
400 Bad RequestParámetros incorrectosFormato de parámetros de petición incorrecto
401 UnauthorizedNo autenticadoRequiere inicio de sesión
403 ForbiddenSin permisosAutenticado pero sin permisos suficientes
404 Not FoundNo existeRecurso no existe
500 Internal Server ErrorError internoExcepción del servidor
503 Service UnavailableNo disponibleServidor en mantenimiento o sobrecargado

6. HTTPS: HTTP seguro

6.1 HTTP vs HTTPS

CaracterísticaHTTPHTTPS
ProtocoloTCPTCP + SSL/TLS
Puerto80443
DatosTransmisión en texto planoTransmisión cifrada
CertificadoNo necesarioRequiere certificado SSL
RendimientoLigeramente más rápidoLigeramente más lento (overhead del handshake)
SEOSin impactoLos motores de búsqueda lo priorizan

6.2 Flujo de trabajo de HTTPS

  1. Client Hello: el cliente envía las suites de cifrado soportadas
  2. Server Hello: el servidor devuelve el certificado y la suite de cifrado seleccionada
  3. Verificación del certificado: el cliente verifica la validez del certificado del servidor
  4. Intercambio de claves: se usa cifrado asimétrico para intercambiar la clave de sesión
  5. Comunicación cifrada: se usa la clave de sesión para comunicación con cifrado simétrico

💡 Ventajas de HTTPS

  • Anti-escuchas: datos cifrados, terceros no pueden leerlos
  • Anti-manipulación: verificación de integridad de datos
  • Anti-suplantación: el certificado SSL verifica la identidad del servidor

7. Mecanismo de caché HTTP

7.1 Cabeceras de caché

CabeceraDescripciónEjemplo
Cache-ControlEstrategia de cachémax-age=3600
ETagVersión del recurso"33a64df551425fcc"
Last-ModifiedÚltima modificaciónWed, 21 Oct 2015 07:28:00 GMT

7.2 Estrategias de caché

Caché fuerte:

http
Cache-Control: max-age=3600

Durante 3600 segundos, el navegador usa directamente la caché sin enviar petición.

Caché negociada:

http
ETag: "33a64df551425fcc"

El navegador envía If-None-Match, el servidor devuelve 304 (no modificado) o 200 (modificado).


8. Preguntas frecuentes

8.1 La diferencia esencial entre GET y POST

Mito: la diferencia entre GET y POST es solo la ubicación de los parámetros.

Verdad:

  • GET es idempotente, múltiples peticiones producen el mismo resultado
  • POST no es idempotente, múltiples peticiones pueden crear múltiples recursos
  • GET puede cachearse, POST no por defecto
  • GET puede guardarse en marcadores, POST no

8.2 Bloqueo de cabeza de línea en HTTP/1.1

Problema: aunque HTTP/1.1 soporta conexiones persistentes, las peticiones deben enviarse en serie. Si la respuesta de una petición anterior es lenta, todas las peticiones posteriores deben esperar.

Soluciones:

  • Multiplexación de HTTP/2
  • Domain sharding (múltiples dominios para establecer múltiples conexiones)
  • Pool de conexiones (limitar la concurrencia)

8.3 Ventajas de HTTP/2

CaracterísticaHTTP/1.1HTTP/2
Formato de transmisiónTextoTramas binarias
MultiplexaciónNo soportadaSoportada
Compresión de cabecerasNoAlgoritmo HPACK
Server pushNo soportadoSoportado

Tabla rápida de términos

TérminoInglésExplicación
HTTPHyperText Transfer ProtocolProtocolo de transferencia de hipertexto
HTTPSHTTP SecureHTTP + SSL/TLS
TCPTransmission Control ProtocolProtocolo de control de transmisión
SSL/TLSSecure Sockets LayerCapa de sockets seguros
IdempotenciaIdempotentMúltiples peticiones producen el mismo resultado
Conexión persistenteKeep-AliveUna conexión TCP para múltiples peticiones
MultiplexaciónMultiplexingEnviar múltiples peticiones simultáneamente
Bloqueo de cabeza de líneaHead-of-Line BlockingUna petición anterior bloquea las posteriores