Quais os pedidos que os browsers' "F5" e "Ctrl + F5" geram?
Existe um padrão para quais acções F5 e Ctrl + F5 } Activar nos navegadores da web?
Uma vez fiz experiências na IE6 e na Firefox 2.x. O F5 } a actualização iria despoletar um pedido HTTP enviado para o servidor com um cabeçalhoIf-Modified-Since
, enquanto o Ctrl + F5 não teria esse cabeçalho. Em meu entender, F5 irá tentar utilizar o conteúdo em cache tanto quanto possível, enquanto Ctrl + F5 pretende abandonar todo o conteúdo em cache e recupere todo o conteúdo dos servidores novamente.
[[3]} mas hoje, eu notei que em alguns dos navegadores mais recentes (Chrome, IE8) ele não funciona mais desta forma. Ambos F5 e Ctrl + F5 enviar o cabeçalho If-Modified-Since
.
Então como é suposto isto funcionar, ou (se não existe um padrão) como é que os principais navegadores diferem na forma como implementam estas funcionalidades de actualização?
6 answers
F5 pode dar-lhe a mesma página mesmo que o conteúdo seja alterado, porque pode carregar a página a partir do cache. Mas Ctrl-F5 força uma atualização de cache, e irá garantir que, se o conteúdo for alterado, você receberá o novo conteúdo.
Depende do navegador, mas eles comportam-se de forma semelhante.
Testei FF, IE7, ópera e cromo.F5 {[8] } normalmente só actualiza a página se esta for modificada. O navegador normalmente tenta usar todos os tipos de cache tanto quanto possível e adiciona um cabeçalho "If-modified-since" ao pedido. O Opera difere ao enviar um "Cache-Control: no-cache".
CTRL-O F5 é usado para forçar uma actualização, ignorando qualquer 'cache'. IE7 adiciona um " Cache-Control: no-cache", assim como FF, que também adiciona"Pragma: no-cache". Chrome faz um "If-modified-since" normal e Opera ignora a chave.
, Se bem me lembro foi o Netscape, que foi o primeiro navegador para adicionar suporte para controle de cache adicionando "Pragma: no-cache" quando você pressionar CTRL-F5.
Editar: tabela actualizada
A tabela abaixo é actualizada com informações sobre o que irá acontecer quando o botão de actualização do navegador for clicado (após um pedido de Joel Coehoorn ), e o" max-age=0 " Cache-control-header.
Quadro actualizado em 27 de setembro 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)
- cromado 6, 0, 472, 63 e 1, 0, 151, 48 (WINXP)
- Opera 10.62 e 9.61 (WINXP)
Notas:
A versão 3.0.6 envia I E C, mas o 3.1.6 abre a página numa nova página, fazer um pedido normal só com "eu".
A versão 10.62 não faz nada. 9.61 poderia fazer C a menos que fosse um erro na minha mesa antiga.
Nota sobre o Chrome 6. 0. 472 : Se fizer uma recarga forçada (como CTRL-F5 ) comporta-se como se o url estivesse marcado internamente para fazer sempre uma recarga forçada. A bandeira é limpa se você vai para a barra de endereços e pressione enter.
Implementei uma página compatível com o cross-browser para testar o comportamento de actualização do navegador (aqui está o código-fonte ) e obter resultados semelhantes aos @some, mas para navegadores modernos:
Pelo menos no Firefox (v3.5), a 'cache' parece estar desactivada em vez de simplesmente limpa. Se houver várias instâncias da mesma imagem em uma página, ela será transferida várias vezes. Este é também o caso das marcas img
que são adicionadas posteriormente através do Ajax / JavaScript.
Então, no caso de você estar se perguntando Por que o navegador continua baixando o mesmo ícone algumas centenas de vezes em seu site Auto-refresh Ajax, é porque você inicialmente carregou a página usando CTRL-F5 .
IE7 / 8 / 9 parecem comportar-se de forma diferente dependendo se a página tem foco ou não.
Se carregar na página e CTRL+F5 então "Cache-Control: no-cache" está incluído nos cabeçalhos do pedido. Se carregar na barra de Localização/Endereço, carregue em CTRL+F5 não é.
Quando o Utilizador carregar emF5 apesar de o novo pedido ir para o servidor web e obter uma resposta para o pedido também. Mas quando o cabeçalho Response é processado, ele verifica as informações necessárias na cache do navegador. Se a informação requerida no cache não tiver expirado então essa informação é restaurada a partir do próprio cache.
Quando o Utilizador carregar em CTRL-F5 mesmo assim, Novo Pedido vai para o servidor web e obter uma resposta. Mas desta vez, quando o cabeçalho do Response é processado ele faz não verificar qualquer informação necessária em cache, e trazer todas as informações atualizadas formulário servidor apenas.