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

394

Existe um padrão para quais ações F5e Ctrl + F5acionamentos nos navegadores da web?

Certa vez, experimentei o IE6 e o ​​Firefox 2.x. A F5 atualização acionaria uma solicitação HTTP enviada ao servidor com um If-Modified-Sincecabeçalho, enquanto Ctrl + F5não teria esse cabeçalho. No meu entendimento, F5 tentarei utilizar o conteúdo em cache o máximo possível, enquanto Ctrl + F5 pretendemos abandonar todo o conteúdo em cache e apenas recuperar todo o conteúdo dos servidores novamente.

Hoje, porém, notei que em alguns dos navegadores mais recentes (Chrome, IE8) ele não funciona mais dessa maneira. Ambos F5e Ctrl + F5envie o If-Modified-Sincecabeçalho.

Então, como isso deve funcionar, ou (se não houver um padrão), como os principais navegadores diferem na maneira como implementam esses recursos de atualização?

Morgan Cheng
fonte
10
FWIW: embora esse certamente possa ser um tópico de superusuário e possa até ter a intenção de focar um pouco no usuário final quando solicitado originalmente, neste momento ele foi respondido e referenciado por programadores e desenvolvedores da web e provavelmente deve ser deixado aqui . SU tem vários outros mais versões, end-user-oriented deste já, e não precisa disso ...
Shog9
2
xkcd.com/1854
sudo

Respostas:

313

De um modo geral:

F5pode fornecer a mesma página, mesmo que o conteúdo seja alterado, porque pode carregar a página do cache. Mas Ctrl- F5força uma atualização de cache e garante que, se o conteúdo for alterado, você obterá o novo conteúdo.

dancavallaro
fonte
86
Isso é preciso, mas observe que, enquanto Ctrl + F5 fará com que o navegador jogue fora o cache e solicite um novo ao servidor, o servidor poderá ignorar o cabeçalho sem cache e servir uma página em cache no servidor. Assim, mesmo Ctrl + F5 pode retornar uma versão antiga da página se o servidor ignorar o cabeçalho sem cache.
precisa saber é o seguinte
F5 atualizará a página - CTRL + F5 fará a atualização 'hard'.
precisa
Mencione também que Ctrl-F5 enviará um formulário, se fornecido.
Jawo
Ok, então se você pressionar ctrl + f5, instrui o navegador a não usar seu cache, mas o que acontece nas solicitações subsequentes para a mesma página? Quero dizer, você pode ver versões mais antigas da página depois de ver a mais antiga? Se estou vendo a versão 1 da página porque está em cache, mas já existe a versão 2 disponível, entendo que pressionar ctrl + f5 me fará ver a versão2. Então eu fecho meu navegador e abro essa página novamente, ¿vejo a versão 1 ou ainda a versão2? Obrigado.
molerus
525

Depende do navegador, mas eles se comportam de maneiras semelhantes.

Eu testei FF, IE7, Opera e Chrome.

F5geralmente 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 cabeçalho "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 "Se modificado desde" e o Opera ignora a chave.

Se bem me lembro, foi o Netscape que foi o primeiro navegador a adicionar suporte ao 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 cabeçalho "max-age = 0" Cache-control-cache.

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)
  • Opera 10.62 e 9.61 (WINXP)

Notas:

  1. A versão 3.0.6 envia I e C, mas a 3.1.6 abre a página em uma nova guia, fazendo uma solicitação normal apenas com "I".

  2. A versão 10.62 não faz nada. 9,61 pode fazer C, a menos que tenha sido um erro de digitação na minha tabela antiga.

Nota sobre o Chrome 6.0.472 : se você fizer uma recarga forçada (como CTRL- F5), ele se comporta como se o URL fosse marcado internamente para sempre fazer uma recarga forçada. A bandeira é limpa se você for para a barra de endereço e pressionar enter.

alguns
fonte
5
@ Joel Coehoorn: Atualizou a tabela com um clique no botão Atualizar. Tenho que amar as tabelas gráficas ASCII, não é? O código de cores foi apenas um efeito colateral do código de cores.
alguns
11
Você não pode fazê-lo como uma tabela HTML adequada?
21411 John Topley
13
FYI - esta resposta foi realmente mencionada nas placas de desenvolvimento / rastreamento de bugs do chrome: code.google.com/p/chromium/issues/detail?id=1906
Kip
18
@ John Topley: Tabelas não são permitidas, então a resposta é não.
alguns
11
Excelente trabalho nesta tabela - isso pertence ao modo quirks. +1. Gostaria de saber se também há variação no que cabeçalhos são usados para recursos de solicitação dentro da página atualizada, tais como imagens, folhas de estilo, etc ...
James Hart
68

Implementei uma página compatível com vários navegadores para testar o comportamento de atualização do navegador (aqui está o código-fonte ) e obter resultados semelhantes a @some, mas para navegadores modernos:

insira a descrição da imagem aqui

Pavel Podlipensky
fonte
Os links da sua página estão quebrados. Corrigi o link na resposta, mas muitos links dessa página estão quebrados. podlipensky.com/examples/refreshbutton/index.html , podlipensky.com/post/2012/02/27/…
Juan Mendes
Desculpe por isso - fazendo a migração do blog. Os links serão corrigidos o mais rápido possível, por enquanto - vá para o repositório do github e faça o download de exemplos.
Pavel Podlipensky
Os links ainda estão quebrados. A migração não terminou?
bernardn
Você pode atualizar sua resposta com a versão atual dos navegadores, especialmente o Safari para dispositivos móveis e computadores, @PavelPodlipensky?
Greg Dubicki
9

Pelo menos no Firefox (v3.5), o cache parece estar desativado em vez de simplesmente limpo. 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 imgtags que são adicionadas posteriormente via Ajax / JavaScript.

Portanto, caso você esteja se perguntando por que o navegador continua baixando o mesmo pequeno ícone algumas centenas de vezes no site Ajax de atualização automática, é porque você carregou a página inicialmente usando CTRL- F5.

mermshaus
fonte
3

O IE7 / 8/9 parece se comportar de maneira diferente, dependendo de a página ter ou não foco.

Se você clicar na página e CTRL+ F5, "Cache-Control: no-cache" será incluído nos cabeçalhos da solicitação. Se você clicar na barra Localização / Endereço, pressione CTRL+ F5não.

Phil Haselden
fonte
1

Quando o usuário pressiona, F5embora uma nova solicitação vá para o servidor da Web e obtenha uma resposta para a solicitação também. Mas quando o cabeçalho 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, elas serão restauradas no próprio cache.

Quando o usuário clica em CTRL- F5mesmo assim, uma nova solicitação vai para o servidor da web e obtém uma resposta. Mas desta vez, quando o cabeçalho de resposta é analisado, não verifica nenhuma informação necessária no cache e traz apenas todas as informações atualizadas do servidor de formulários.

naXa
fonte