O HTTP permite que as respostas sejam armazenadas em cache, mesmo que elas não tenham os cabeçalhos Expires explícitos ou Cache-Control.
Especificamente, eles têm permissão para calcular seu próprio chamado frescor heurístico para respostas com determinados códigos de status HTTP (incluindo 200 OK
). Geralmente, isso é baseado no valor do cabeçalho Last-Modified
; Por exemplo, se o LM for 1 dia atrás, quando a resposta for armazenada pela primeira vez, um cache poderá descobrir que é seguro assumir que ele é recente por 2 horas.
must-revalidate
é uma instrução que informa aos caches que, uma vez que algo se torna obsoleto, ele deve ser verificado no servidor de origem. Se não estiver presente, os caches podem (geralmente) usar respostas obsoletas em circunstâncias incomuns (por exemplo, se perderem contato com o servidor de origem).
Portanto, não, este cache não parece estar se comportando mal, embora pareça um pouco agressivo no cálculo de frescor heurístico. Se você não quiser que o cache armazene a resposta, tente Cache-Control: no-store
ou (de preferência) apenas defina um max-age
explícito para controlar por quanto tempo ele é considerado novo.
Você pode estar interessado em dar uma olhada no documento atual do Grupo de Trabalho IETF HTTPbis que cobre o armazenamento em cache:
que, esperamos, torne isso um pouco mais claro do que o RFC2616.
Além disso, o link verifica URLs e explica como os caches lidam com diretivas de resposta específicas.