Glosario

¿Qué es HTTP Caching (Cache-Control, ETag)?

20 de mayo de 2026

HTTP caching es un mecanismo del protocolo HTTP que permite a navegadores, CDNs y proxies almacenar copias de respuestas y reutilizarlas en peticiones posteriores sin tocar el servidor de origen. Es la tecnica de rendimiento mas importante de la web. Un activo estatico bien cacheado (imagen, CSS, JS) tarda 1 a 10 ms desde el cache del navegador frente a 100 a 1000 ms desde el origen. Se controla con cabeceras definidas en RFC 7234 (junio 2014) y RFC 9111 (junio 2022): Cache-Control (principal moderno), Expires (legacy), ETag y Last-Modified (validadores) y Vary (clave de cache). Usado bien reduce LCP, ahorra ancho de banda (Google estima 60 a 80 por ciento cacheable), reduce carga del origen y baja huella de carbono. Mal usado provoca contenido obsoleto, despliegues rotos y recargas infinitas.

Como funciona

  1. Cache hit si la copia esta fresca.
  2. Conditional request con If-None-Match o If-Modified-Since si esta caducada pero hay validador, respuesta 304 Not Modified.
  3. Cache miss si no hay validador.

Cache-Control

DirectivaSignificado
max-age=NFresca durante N segundos.
s-maxage=NSolo caches compartidos.
publicCualquier cache puede guardar.
privateSolo el navegador.
no-cacheRevalidar antes de usar.
no-storeNo almacenar nunca.
must-revalidateSin servir stale en error.
stale-while-revalidate=NSirve stale mientras revalida.
stale-if-error=NSirve stale si origen falla.
immutableNunca cambiara.
Cache-Control: public, max-age=31536000, immutable
Cache-Control: public, max-age=0, s-maxage=300, stale-while-revalidate=86400
Cache-Control: private, no-cache
Cache-Control: no-store

ETag

Identificador opaco (a menudo hash). El cliente envia If-None-Match. Si coincide, 304 sin cuerpo. Pueden ser strong o weak (prefijo W/).

Last-Modified

Marca temporal con resolucion de 1 segundo. If-Modified-Since al volver. ETag es mejor para cambios mas frecuentes.

Vary

  • Vary: Accept-Encoding separa gzip/brotli.
  • Vary: Accept-Language separa idiomas.
  • Vary: User-Agent casi siempre malo.
  • Vary: Cookie rompe el cache compartido.

Browser vs CDN vs Proxy

CapaUbicacionHonora
NavegadorDispositivo del usuariomax-age, ETag, Last-Modified
CDN edgePoP cercano (Cloudflare, Fastly, Akamai, CloudFront)s-maxage, stale-while-revalidate
Proxy corporativoRedes empresarialespublic, private
Service WorkerPagina via JSLogica propia

Cache busting y fingerprinting

webpack, Vite, esbuild, Turbopack, Rollup. app.css -> app.a1b2c3d4.css. HTML con max-age corto, assets con hash con max-age=31536000 immutable.

HTTP caching en WordPress

  • WP Rocket.
  • LiteSpeed Cache.
  • W3 Total Cache.
  • WP Super Cache.
  • Cloudflare APO a 5 USD/mes.
location ~* \.(jpg|jpeg|png|gif|webp|avif|svg|ico|css|js|woff2)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
}

Errores comunes

  • max-age largo en HTML.
  • Sin headers en activos estaticos.
  • Vary: User-Agent.
  • Set-Cookie con public.
  • Pragma: no-cache (obsoleto).
  • Sin headers (heuristica del navegador).
  • Cache poisoning sin Vary correcto.

Como probarlo

  • DevTools Network.
  • curl -I.
  • WebPageTest.
  • Lighthouse.
  • RedBot (redbot.org).

HTTP/2 y HTTP/3

Misma semantica de cache. Server Push deprecado en Chrome desde 2022 en favor de Early Hints (RFC 8297, 103 Early Hints).

Como ayuda InspectWP?

InspectWP comprueba Cache-Control, ETag, Last-Modified y Vary de cada activo. Marca cabeceras faltantes, max-age cortos en activos con hash y combinaciones Vary peligrosas.

Analiza tu sitio de WordPress ahora

InspectWP analiza tu sitio de WordPress en busca de problemas de seguridad, SEO, cumplimiento del RGPD y rendimiento, gratis.

Analiza tu sitio gratis