Existe um padrão para o que as ações F5 e Ctrl + F5 acionam nos navegadores da web?
Eu experimentei uma vez no IE6 e no Firefox 2.x. A atualização da F5 acionaria uma solicitação HTTP enviada ao servidor com um header If-Modified-Since
, enquanto Ctrl + F5 não teria esse header. No meu entender, a F5 tentará utilizar o conteúdo em cache o máximo possível, enquanto o Ctrl + F5 deve abandonar todo o conteúdo em cache e recuperar todo o conteúdo dos servidores novamente.
Mas hoje, notei que em alguns dos navegadores mais recentes (Chrome, IE8) isso não funciona mais. F5 e Ctrl + F5 enviam o header If-Modified-Since
.
Então, como isso deve funcionar ou (se não houver padrão), como os principais navegadores diferem em como eles implementam esses resources de atualização?
De um modo geral:
A F5 pode fornecer a mesma página mesmo que o conteúdo seja alterado, porque pode carregar a página do cache. Mas Ctrl – F5 força uma atualização de cache e garantirá que, se o conteúdo for alterado, você obterá o novo conteúdo.
Cabe ao navegador, mas eles se comportam de maneira semelhante.
Eu testei FF, IE7, Opera e Chrome.
A F5 geralmente atualiza a página apenas se ela for modificada. O navegador geralmente tenta usar todos os tipos de cache o máximo possível e adiciona um header “If-modified-since” à solicitação. O Opera difere enviando um “Cache-Control: no-cache”.
CTRL – F5 é usado para forçar uma atualização, desconsiderando qualquer cache. O IE7 adiciona um “Cache-Control: no-cache”, assim como o FF, que também adiciona “Pragma: no-cache”. O Chrome faz um “If-modified-since” normal e o Opera ignora a chave.
Se bem me lembro, foi o Netscape que foi o primeiro navegador a adicionar suporte para o controle de cache, adicionando “Pragma: No-cache” quando você pressionou CTRL – F5 .
Editar: tabela atualizada
A tabela abaixo é atualizada com informações sobre o que acontecerá quando o botão de atualização do navegador for clicado (após uma solicitação de Joel Coehoorn ) e o header de controle de cache “max-age = 0”.
Tabela atualizada, 27 de setembro de 2010
┌────────────┬───────────────────────────────────────────────┐ │ UPDATED │ Firefox 3.x │ │27 SEP 2010 │ ┌────────────────────────────────────────────┤ │ │ │ MSIE 8, 7 │ │ Version 3 │ │ ┌─────────────────────────────────────────┤ │ │ │ │ Chrome 6.0 │ │ │ │ │ ┌──────────────────────────────────────┤ │ │ │ │ │ Chrome 1.0 │ │ │ │ │ │ ┌───────────────────────────────────┤ │ │ │ │ │ │ Opera 10, 9 │ │ │ │ │ │ │ ┌────────────────────────────────┤ │ │ │ │ │ │ │ │ ├────────────┼──┼──┼──┼──┼──┼────────────────────────────────┤ │ F5│IM│I │IM│IM│C │ │ │ SHIFT-F5│- │- │CP│IM│- │ Legend: │ │ CTRL-F5│CP│C │CP│IM│- │ I = "If-Modified-Since" │ │ ALT-F5│- │- │- │- │*2│ P = "Pragma: No-cache" │ │ ALTGR-F5│- │I │- │- │- │ C = "Cache-Control: no-cache" │ ├────────────┼──┼──┼──┼──┼──┤ M = "Cache-Control: max-age=0" │ │ CTRL-R│IM│I │IM│IM│C │ - = ignored │ │CTRL-SHIFT-R│CP│- │CP│- │- │ │ ├────────────┼──┼──┼──┼──┼──┤ │ │ Click│IM│I │IM│IM│C │ With 'click' I refer to a │ │ Shift-Click│CP│I │CP│IM│C │ mouse click on the browsers │ │ Ctrl-Click│*1│C │CP│IM│C │ refresh-icon. │ │ Alt-Click│IM│I │IM│IM│C │ │ │ AltGr-Click│IM│I │- │IM│- │ │ └────────────┴──┴──┴──┴──┴──┴────────────────────────────────┘
Versões testadas:
Notas:
A versão 3.0.6 envia I e C, mas 3.1.6 abre a página em uma nova guia, fazendo uma solicitação normal com apenas “I”.
A versão 10.62 não faz nada. 9.61 pode fazer C, a menos que fosse um erro de digitação na minha antiga tabela.
Nota sobre o Chrome 6.0.472 : Se você fizer um recarregamento forçado (como CTRL – F5 ), ele se comportará como se o URL estivesse marcado internamente para sempre fazer uma recarga forçada. O sinalizador é apagado se você for para a barra de endereços e pressionar Enter.
Implementei uma página compatível com vários navegadores para testar o comportamento de atualização do navegador e obter resultados semelhantes a @some, mas para navegadores modernos:
Pelo menos no Firefox (v3.5), o cache parece estar desabilitado em vez de simplesmente desabilitado. Se houver várias instâncias da mesma imagem em uma página, ela será transferida várias vezes. Esse também é o caso das tags img
que são adicionadas posteriormente via Ajax / JavaScript.
Então, caso você esteja se perguntando por que o navegador continua baixando o mesmo pequeno ícone algumas centenas de vezes em seu site Ajax de atualização automática, é porque você inicialmente carregou a página usando CTRL – F5 .
IE7 / 8/9 parecem se comportar de maneira diferente, dependendo se a página tem foco ou não.
Se você clicar na página e CTRL + F5 , “Cache-Control: no-cache” será incluído nos headers da solicitação. Se você clicar na barra de localização / endereço, pressione CTRL + F5 não é.
Quando o usuário pressionar F5, embora a nova solicitação vá para o servidor da Web e receba uma resposta para a solicitação também. Mas quando o header de resposta é analisado, verifique as informações necessárias no cache do navegador. Se as informações necessárias no cache não tiverem expirado, essas informações serão restauradas no próprio cache.
Quando o usuário clica em CTRL – F5, mesmo assim, o novo pedido vai para o servidor da web e obtém uma resposta. Mas, desta vez, quando o header de resposta é analisado, ele não verifica nenhuma informação necessária no cache e traz apenas todos os servidores de formulário de informações atualizadas.