Jak zapobiec buforowaniu strony w Rails

Ubuntu -> Apache -> Phusion - > Rails 2.3

Główna część mojej strony reaguje na twoje kliknięcia. Tak więc, jeśli klikniesz na link, wyśle cię do miejsca docelowego i natychmiast zregeneruje Twoją stronę.

Ale jeśli naciśniesz przycisk Wstecz, nie zobaczysz nowej strony. Niestety, nie wyświetla się bez ręcznego odświeżania; wygląda na to, że przeglądarka go buforuje. Chcę się upewnić, że przeglądarka nie buforuje strony.

Oddzielnie, ja czy chcę Ustaw dalekosiężne daty ważności dla wszystkich moich aktywów statycznych.

Jaki jest najlepszy sposób na rozwiązanie tego problemu? Mam to rozwiązać w Rails? Apacz? Javascript?

Dzięki za pomoc, Jason


Niestety. Żadna z tych sugestii Nie wymusiła zachowania, którego szukam.

Może jest odpowiedź javascript? Mógłbym mieć rails wypisać znacznik czasu w komentarzu, a następnie sprawdzić javascript, aby sprawdzić, czy czasy są w ciągu pięciu sekund (lub cokolwiek działa). Jeśli tak, to dobra, ale jeśli nie, to przeładuj stronę?

Myślisz, że to zadziała?

Dzięki za pomoc,

Jason

Author: Lasse Vågsæther Karlsen, 2009-04-03

5 answers

W końcu to rozgryzłem - http://blog.serendeputy.com/posts/how-to-prevent-browsers-from-caching-a-page-in-rails / in application_controller.rb

class ApplicationController < ActionController::Base

before_filter :set_cache_headers

  private

  def set_cache_headers
    response.headers["Cache-Control"] = "no-cache, no-store"
    response.headers["Pragma"] = "no-cache"
    response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
  end
end
 314
Author: Jason Butler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-01 02:29:24
 14
Author: Sacre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-05 09:57:35

Użyłem tej linii z pewnym sukcesem w kontrolerze. Działa w Safari i Internet Explorer, ale nie widziałem, aby działał z Firefoksem.

response.headers["Expires"] = "#{1.year.ago}"

Dla drugiego punktu, jeśli używasz metod pomocniczych rails, takich jak

stylesheet_link_tag

I pozostawić domyślne ustawienia na serwerze WWW, zasoby są zazwyczaj buforowane dość dobrze.

 3
Author: erik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-02 21:29:04

Czystszym sposobem byłoby napisanie oprogramowania pośredniczącego w szafie, które zmienia nagłówek Cache-Control w oparciu o pewną logikę (na przykład tylko dla typu MIME application/xml). Lub, dla brzydszego, ale wciąż działającego podejścia, można zmienić stałą ActionDispatch:: Response:: DEFAULT_CACHE_CONTROL na 'no-cache'. Oczywiście, jeśli wymagany jest kontroler i/lub ziarnistość akcji, lepiej zrobić to w kontrolerze.

 1
Author: Roman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-07 20:03:14

Uwaga: nie możesz warunkowo wyczyścić pamięci podręcznej(np. jeśli before_filter wywoła reset_cache, Jeśli użytkownik już tam był). Musisz bezwarunkowo wyczyścić pamięć podręczną, ponieważ przeglądarka nie wysyła nowego żądania tylko po to, aby sprawdzić, czy tym razem musi przeładować, mimo że nie musiała ostatnio.

Przykład:

before_filter :reset_cache, if: :user_completed_demographics?

Nie będzie działać, aby uniemożliwić użytkownikom powrót po ich obecności, ponieważ przeglądarka używa oryginalnych nagłówków pamięci podręcznej z tyłu guzik.

before_filter :reset_cache

Będzie działać, jednak (po odświeżeniu strony i wyczyszczeniu pamięci podręcznej przed dodaniem tego, oczywiście), ponieważ, na pierwsze żądanie, przeglądarka otrzyma no-cache, no-store, ... i zastosuje go do przyszłych załadowań strony.

 1
Author: BalinKingOfMoria,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-20 17:25:34