Sobre este problema HTML
O atributo http-equiv no elemento <meta> foi concebido para simular certos cabeçalhos de resposta HTTP quando um servidor não está configurado para os enviar diretamente. Contudo, a especificação HTML apenas permite um conjunto limitado de valores para este atributo. De acordo com o padrão HTML living do WHATWG, os valores válidos para http-equiv são:
-
content-type— uma forma alternativa de declarar a codificação de caracteres -
default-style— define a folha de estilos preferida -
refresh— redireciona ou recarrega a página após um atraso -
x-ua-compatible— especifica o modo de compatibilidade do documento para o Internet Explorer -
content-security-policy— declara uma política de segurança de conteúdo
Usar Cache-Control como valor de http-equiv é um padrão que teve origem no desenvolvimento web inicial, quando alguns navegadores tentavam honrar as diretivas de cache definidas através de tags <meta>. Na prática, os navegadores modernos ignoram completamente <meta http-equiv="Cache-Control">. O comportamento de cache é determinado pelos cabeçalhos de resposta HTTP reais enviados pelo servidor, não por tags <meta> no corpo do documento. Isto significa que a tag não só desencadeia um erro de validação como também não tem qualquer efeito prático — dá uma falsa sensação de controlo sobre o cache sem fazer nada.
Isto é importante por várias razões. HTML inválido pode causar comportamento inesperado nos navegadores, particularmente casos extremos com agentes de utilizador mais antigos ou menos comuns. Também mina a confiança na sua marcação — se um validador sinaliza problemas, torna-se mais difícil detetar erros genuinamente importantes. Além disso, depender de uma tag não funcional para cache pode levar a problemas reais se os programadores assumirem que o cache está a ser gerido quando não está.
A abordagem correta é configurar cabeçalhos de controlo de cache no seu servidor web ou na camada da aplicação. Todos os principais servidores web e frameworks fornecem uma forma direta de definir cabeçalhos HTTP Cache-Control.
Para Apache, pode adicionar isto ao seu .htaccess ou configuração do servidor:
Header set Cache-Control "no-cache, no-store, must-revalidate"
Para Nginx, use:
add_header Cache-Control "no-cache, no-store, must-revalidate";
Numa aplicação Node.js/Express:
res.set('Cache-Control', 'no-cache, no-store, must-revalidate');
Exemplos
Inválido: usar Cache-Control como valor de http-equiv
<!DOCTYPE html>
<html lang="en">
<head>
<title>My Page</title>
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
</head>
<body>
<p>This page attempts to control caching via meta tags.</p>
</body>
</html>
Neste exemplo, todas as três tags <meta> são problemáticas. Cache-Control e Pragma não são valores válidos para http-equiv. Embora Expires tenha sido historicamente usado, também não está na lista atual de valores conformes na especificação WHATWG.
Corrigido: remover tags <meta> inválidas
<!DOCTYPE html>
<html lang="en">
<head>
<title>My Page</title>
<!-- Cache-Control should be set via server HTTP headers -->
</head>
<body>
<p>Caching is now properly handled server-side.</p>
</body>
</html>
As tags <meta> inválidas são removidas completamente. O comportamento de cache é configurado no servidor, onde realmente tem efeito.
Válido: usar um valor permitido para http-equiv
<!DOCTYPE html>
<html lang="en">
<head>
<title>Redirecting</title>
<meta http-equiv="refresh" content="5;url=https://example.com">
</head>
<body>
<p>You will be redirected in 5 seconds.</p>
</body>
</html>
Este exemplo usa refresh, que é um valor válido para http-equiv. Demonstra para que o atributo foi realmente concebido — um pequeno conjunto de diretivas bem definidas e suportadas pelos navegadores.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.