Ubuntu -> Apache -> Phusion Passenger -> Rails 2.3
Główna część mojej witryny reaguje na Twoje kliknięcia. Jeśli więc klikniesz link, przekieruje Cię on do miejsca docelowego i natychmiast zregeneruje Twoją stronę.
Ale jeśli naciśniesz przycisk Wstecz, nie zobaczysz nowej strony. Niestety nie pojawia 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.
Osobno, ja nie chcę, aby ustawić daleko przyszłych dat ważności dla wszystkich moich zasobów statycznych.
Jaki jest najlepszy sposób rozwiązania tego problemu? Czy powinienem rozwiązać ten problem w Railsach? Apache? Javascript?
Dzięki za całą twoją pomoc, Jason
Niestety. Żadna z tych sugestii nie wymusiła zachowania, którego szukam.
Może jest odpowiedź javascript? Mógłbym kazać railsom napisać znacznik czasu w komentarzu, a następnie sprawdzić javascript, aby sprawdzić, czy czasy mieszczą się w ciągu pięciu sekund (lub cokolwiek działa). Jeśli tak, to dobrze, ale jeśli nie, to ponownie załaduj stronę?
Czy myślisz, że to zadziała?
Dzięki za całą twoją pomoc,
Jason
źródło
Cache-Control: no-store
tylko wtedy, gdy przeglądarka jest zgodna z HTTP 1.1. Sekcja 14.9.2 Co może być przechowywane wposługiwać się:
http://api.rubyonrails.org/classes/ActionController/ConditionalGet.html#method-i-expires_now
źródło
expires_now
wysyła tylkono-cache
nagłówek. W zależności od przeglądarki może to nie wystarczyć. (Na przykład Firefox chceno-store
połączeń innych niż HTTPS: developer.mozilla.org/en/docs/Using_Firefox_1.5_caching )no-store
jest również potrzebne.Użyłem tej linii z pewnym sukcesem w kontrolerze. Działa w Safari i Internet Explorerze, ale nie widziałem, żeby działał z Firefoksem.
Po drugie, jeśli używasz metod pomocniczych rails, takich jak
i pozostaw domyślne ustawienia na swoim serwerze internetowym, zasoby są zwykle buforowane całkiem dobrze.
źródło
1.year.ago
to niepotrzebne obciążenie. Wystarczy wybrać dowolny czas jakiś w przeszłości jakFri, 01 Jan 1990 00:00:00 GMT
Bardziej przejrzystym sposobem byłoby napisanie oprogramowania pośredniczącego Rack, które zmienia nagłówek Cache-Control na podstawie pewnej logiki (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 wymagana jest szczegółowość kontrolera i / lub akcji, lepiej zrobić to w kontrolerze.
źródło
Uwaga: nie można warunkowo wyczyścić pamięci podręcznej (np. Gdy
before_filter
dzwoni tylkoreset_cache
wtedy, gdy 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 zostać ponownie załadowane, mimo że nie musiało to być ostatnim razem.Przykład:
nie będzie działać, aby uniemożliwić użytkownikom powrót po tym, jak tam byli, ponieważ przeglądarka używa oryginalnych nagłówków pamięci podręcznej na przycisku Wstecz.
zadziała jednak (oczywiście po odświeżeniu strony i wyczyszczeniu pamięci podręcznej sprzed dodania tego), ponieważ przy pierwszym żądaniu przeglądarka pobierze plik
no-cache, no-store, ...
i zastosuje go do przyszłych ładowań strony.źródło
no_cache_control
Klejnot.Jeśli musisz to zrobić dla wszystkich odpowiedzi, np. Aby przejść test penetracyjny (BURP, Detectify itp.), Możesz zainstalować ten Gem na Rails 4+, aby dodać następujące nagłówki do wszystkich odpowiedzi:
Działa jak urok i jest naprawdę właściwą drogą do tworzenia bezpiecznych aplikacji internetowych HTTPS, które wymagają uwierzytelnienia.
źródło