Quais solicitações são atualizadas pelos navegadores “F5” e “Ctrl + F5”?

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 CtrlF5 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”.

    CTRLF5 é 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 CTRLF5 .

    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:

    • Firefox 3.1.6 e 3.0.6 (WINXP)
    • MSIE 8.0.6001 e 7.0.5730.11 (WINXP)
    • Chrome 6.0.472.63 e 1.0.151.48 (WINXP)
    • Ópera 10.62 e 9.61 (WINXP)

    Notas:

    1. 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”.

    2. 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 CTRLF5 ), 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:

    insira a descrição da imagem aqui

    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 CTRLF5 .

    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 CTRLF5, 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.