Ubuntu -> Apache -> Phusion Passenger -> Rails 2.3
A parte principal do meu site reage aos seus cliques. Portanto, se você clicar em um link, ele o enviará ao destino e regenerará instantaneamente sua página.
Mas, se você pressionar o botão Voltar, não verá a nova página. Infelizmente, ele não aparece sem uma atualização manual; parece que o navegador está em cache. Quero garantir que o navegador não armazene em cache a página.
Separadamente, eu faço deseja definir far-futuros datas de validade para todos os meus bens estáticos.
Qual é a melhor maneira de resolver isso? Devo resolver isso no Rails? Apache? Javascript?
Obrigado por toda a sua ajuda, Jason
Alas. Nenhuma dessas sugestões forçou o comportamento que estou procurando.
Talvez haja uma resposta javascript? Eu poderia fazer com que os trilhos escrevessem um carimbo de data e hora em um comentário e depois fiz o javascript verificar se os tempos estão dentro de cinco segundos (ou o que funcionar). Se sim, tudo bem, mas se não, recarregue a página?
Você acha que isso funcionaria?
Obrigado por toda sua ajuda,
Jason
fonte
Cache-Control: no-store
desde que o navegador seja compatível com HTTP 1.1. Seção 14.9.2 O que pode ser armazenada por cachesusar:
http://api.rubyonrails.org/classes/ActionController/ConditionalGet.html#method-i-expires_now
fonte
expires_now
envia apenas ono-cache
cabeçalho. Dependendo do navegador, isso pode não ser suficiente. (Por exemplo, o Firefox deseja umno-store
para conexões que não sejam HTTPS: developer.mozilla.org/en/docs/Using_Firefox_1.5_caching )no-store
também é necessária.Eu usei esta linha com algum sucesso no controlador. Funciona no Safari e no Internet Explorer, mas não o vi funcionar com o Firefox.
Para seu segundo ponto, se você usar os métodos auxiliares de trilhos, como
e deixar as configurações padrão em seu servidor da web, os ativos normalmente são armazenados em cache muito bem.
fonte
1.year.ago
sobrecarga desnecessária. Basta escolher um tempo arbitrário no passado, comoFri, 01 Jan 1990 00:00:00 GMT
A maneira mais limpa seria escrever um middleware de rack, que altera o cabeçalho de controle de cache com base em alguma lógica (por exemplo, apenas para application / xml mime-type). Ou, para uma abordagem mais feia, mas ainda funcionando, pode-se alterar a constante ActionDispatch :: Response :: DEFAULT_CACHE_CONTROL para 'no-cache'. Obviamente, se a granularidade do controlador e / ou ação for necessária, é melhor fazer isso no controlador.
fonte
Nota: você não pode limpar o cache condicionalmente (como se
before_filter
apenas ligassereset_cache
se o usuário já estivesse lá). Você precisa incondicionalmente limpar o cache , porque o navegador não fará uma nova solicitação apenas para verificar se, dessa vez, precisa ser recarregado, mesmo que não precise da última vez.Exemplo:
não funcionará para impedir que os usuários voltem depois que eles estiverem lá, pois o navegador usa os cabeçalhos de cache originais no botão Voltar.
funcionará, no entanto (depois de atualizar a página e limpar o cache antes de você adicionar isso, obviamente), pois, na primeira solicitação, o navegador obterá
no-cache, no-store, ...
e aplicará a futuras carregamentos de página.fonte
no_cache_control
Gema.Se você precisar fazer isso para todas as respostas, por exemplo, para passar em um teste de penetração (BURP, Detectify, etc.), poderá instalar esta Gem on Rails 4+ para adicionar os seguintes cabeçalhos a todas as respostas:
Funciona como um encanto e é realmente o caminho certo para aplicativos da Web HTTPS seguros que exigem autenticação para fazer qualquer coisa.
fonte