Ubuntu -> Apache -> Phusion Passenger -> Rails 2.3
Основная часть моего сайта реагирует на ваши клики. Поэтому, если вы нажмете на ссылку, она отправит вас к месту назначения и мгновенно восстановит вашу страницу.
Но, если вы нажмете кнопку «Назад», вы не увидите новую страницу. К сожалению, оно не отображается без обновления вручную; кажется, что браузер кеширует его. Я хочу убедиться, что браузер не кэширует страницу.
Отдельно я бы хочу установить даты истечения срока действия далеко в будущем для всех моих статических активов.
Какой лучший способ решить это? Должен ли я решить это в Rails? Apache? Javascript?
Спасибо за вашу помощь, Джейсон
Увы. Ни одно из этих предложений не заставило меня искать нужное поведение.
Может быть, есть ответ javascript? Я мог бы сделать так, чтобы rails записали временную метку в комментарии, а затем проверили javascript, чтобы увидеть, находятся ли времена в течение пяти секунд (или как-то работает). Если да, то хорошо, но если нет, то перезагрузите страницу?
Как вы думаете, это будет работать?
Спасибо за вашу помощь,
Джейсон
источник
Cache-Control: no-store
пока браузер совместим с HTTP 1.1. Раздел 14.9.2. Что можетиспользовать:
http://api.rubyonrails.org/classes/ActionController/ConditionalGet.html#method-i-expires_now
источник
expires_now
только отправляетno-cache
заголовок. В зависимости от браузера этого может быть недостаточно. (Например, Firefox хочетno-store
для соединений не-HTTPS: developer.mozilla.org/en/docs/Using_Firefox_1.5_caching )no-store
Также необходимо.Я использовал эту строку с некоторым успехом в контроллере. Он работает в Safari и Internet Explorer, но я не видел, чтобы он работал с Firefox.
Во-вторых, если вы используете вспомогательные методы rails, такие как
и оставьте настройки по умолчанию на вашем веб-сервере, ресурсы обычно кешируются довольно хорошо.
источник
1.year.ago
это ненужные накладные расходы. Просто выберите произвольное время в прошлом, напримерFri, 01 Jan 1990 00:00:00 GMT
Более чистым способом было бы написать промежуточное программное обеспечение Rack, которое изменяет заголовок Cache-Control на основе некоторой логики (например, только для application / xml mime-type). Или, для более уродливого, но все еще работающего подхода, можно изменить константу ActionDispatch :: Response :: DEFAULT_CACHE_CONTROL на 'no-cache'. Конечно, если требуется контроллер и / или гранулярность действий, лучше сделать это в контроллере.
источник
Замечание: вы не можете условно очистить кеш (например, если
before_filter
звонит только,reset_cache
если пользователь уже был там). Вам необходимо безоговорочно очистить кеш, потому что браузер не будет делать новый запрос, просто чтобы посмотреть, нужно ли на этот раз перезагрузить его, даже если в прошлый раз это не требовалось.Пример:
не будет работать, чтобы предотвратить возвращение пользователей после того, как они были там, так как браузер использует оригинальные заголовки кэша на кнопке «Назад».
однако будет работать (после обновления страницы и очистки кеша до того, как вы добавили это, очевидно), так как по первому запросу браузер получит
no-cache, no-store, ...
и применит его к будущим загрузкам страницы.источник
no_cache_control
Gem.Если вам нужно сделать это для всех ответов, например, чтобы пройти тест на проникновение (BURP, Detectify и т. Д.), Вы можете установить этот Gem на Rails 4+, чтобы добавить следующие заголовки ко всем ответам:
Работает как шарм и действительно является правильным путем для создания безопасных веб-приложений HTTPS, которые требуют аутентификации, чтобы что-либо делать.
источник