Acerca de este problema HTML
La cabecera HTTP Pragma es un vestigio de HTTP/1.0, originalmente usado para instruir a proxies y navegadores que no almacenen en caché una respuesta. En especificaciones HTML anteriores, los desarrolladores a veces colocaban <meta http-equiv="Pragma" content="no-cache"> en sus documentos, esperando que los navegadores lo trataran como una cabecera HTTP real. Sin embargo, el estándar HTML vigente (mantenido por WHATWG) restringe el atributo http-equiv a un pequeño conjunto de valores reconocidos: content-type, default-style, refresh, x-ua-compatible, y content-security-policy. El valor Pragma no está entre ellos, por lo que el validador W3C lo marca como inválido.
Más allá del error de validación, este enfoque siempre ha sido poco confiable. Los navegadores y proxies de almacenamiento en caché generalmente ignoran las etiquetas meta http-equiv para propósitos de control de caché — dependen de las cabeceras de respuesta HTTP reales enviadas por el servidor. Mantener esta etiqueta inválida en tu HTML proporciona una falsa sensación de seguridad sin producir ningún beneficio real de almacenamiento en caché.
Por qué esto es un problema
-
Cumplimiento de estándares: Usar un valor
http-equivno reconocido produce HTML inválido que falla la validación W3C. -
Sin efecto práctico: La mayoría de navegadores y todos los proxies intermediarios (CDNs, proxies reversos) ignoran las directivas de caché embebidas en etiquetas
<meta>. Solo las cabeceras HTTP reales controlan de manera confiable el comportamiento de almacenamiento en caché. - Código engañoso: Los desarrolladores que mantienen la base de código pueden asumir que el almacenamiento en caché está gestionado correctamente en HTML cuando no es así, llevando a problemas inesperados de caché en producción.
Cómo solucionarlo
-
Elimina la etiqueta
<meta>inválida del<head>de tu HTML. -
Configura el almacenamiento en caché vía cabeceras de respuesta HTTP en tu servidor. Establece
Cache-Control(y opcionalmentePragmapara compatibilidad con HTTP/1.0) como cabeceras reales en tu configuración de servidor o código de aplicación.
Por ejemplo, en un archivo .htaccess de Apache:
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
O en una configuración de Nginx:
add_header Cache-Control "no-cache, no-store, must-revalidate";
add_header Pragma "no-cache";
Estas cabeceras del lado del servidor son la manera correcta y efectiva de gestionar el almacenamiento en caché.
Ejemplos
Incorrecto: usar Pragma en http-equiv
Esto desencadena el error de validación:
<head>
<meta charset="utf-8">
<meta http-equiv="Pragma" content="no-cache">
<title>My Page</title>
</head>
Incorrecto: usar Cache-Control en http-equiv
Aunque Cache-Control también se ve a veces en etiquetas <meta>, tampoco es un valor http-equiv válido en el estándar HTML, y los navegadores en gran medida lo ignoran:
<head>
<meta charset="utf-8">
<meta http-equiv="Cache-Control" content="no-cache">
<title>My Page</title>
</head>
Correcto: eliminar la etiqueta inválida y usar cabeceras del servidor
Simplemente elimina la etiqueta meta de almacenamiento en caché. Tu HTML se mantiene limpio y válido:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>My Page</title>
</head>
<body>
<p>Cache control is handled by server-side HTTP headers.</p>
</body>
</html>
Después configura tu servidor web para enviar las cabeceras de respuesta HTTP Cache-Control y Pragma apropiadas como se muestra en los ejemplos de configuración de servidor arriba. Esta es la única manera confiable de controlar cómo los navegadores y proxies almacenan en caché tus páginas.
Encuentra problemas como este automáticamente
Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.