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?


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

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.


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.


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


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.


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.