우분투-> 아파치-> Phusion Passenger-> Rails 2.3
내 사이트의 주요 부분은 클릭에 반응합니다. 따라서 링크를 클릭하면 목적지로 이동하여 즉시 페이지를 재생성합니다.
그러나 뒤로 버튼을 누르면 새 페이지가 표시되지 않습니다. 불행히도 수동으로 새로 고치지 않으면 표시되지 않습니다. 브라우저가 캐시하고있는 것 같습니다. 브라우저가 페이지를 캐시하지 않도록하고 싶습니다.
별도로, 내가 할 내 모든 고정 자산 먼 미래의 만료 날짜를 설정합니다.
이것을 해결하는 가장 좋은 방법은 무엇입니까? Rails에서이 문제를 해결해야합니까? 아파치? 자바 스크립트?
모든 도움을 주셔서 감사합니다, Jason
아아. 이러한 제안 중 어느 것도 내가 원하는 행동을 강요하지 않았습니다.
아마도 자바 스크립트 답변이 있습니까? 레일에 주석에 타임 스탬프를 쓰도록하고 시간이 5 초 (또는 작동하는 것이 무엇이든)인지 확인하기 위해 자바 스크립트를 검사하도록 할 수 있습니다. 그렇다면 괜찮지 만 그렇지 않으면 페이지를 다시로드 하시겠습니까?
이것이 효과가 있다고 생각합니까?
모든 도움을 주셔서 감사합니다
제이슨
답변
– 마지막으로이 알아 낸 http://blog.serendeputy.com/posts/how-to-prevent-browsers-from-caching-a-page-in-rails/ 의를application_controller.rb
레일 후 5 :
class ApplicationController < ActionController::Base
before_action :set_cache_headers
private
def set_cache_headers
response.headers["Cache-Control"] = "no-cache, no-store"
response.headers["Pragma"] = "no-cache"
response.headers["Expires"] = "Mon, 01 Jan 1990 00:00:00 GMT"
end
end
Rails 4 및 이전 버전 :
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"] = "Mon, 01 Jan 1990 00:00:00 GMT"
end
end
답변
사용하다:
expires_now()
http://api.rubyonrails.org/classes/ActionController/ConditionalGet.html#method-i-expires_now
답변
나는이 라인을 컨트롤러에서 약간의 성공으로 사용했습니다. Safari 및 Internet Explorer에서 작동하지만 Firefox에서 작동하는 것을 보지 못했습니다.
response.headers["Expires"] = "#{1.year.ago}"
두 번째로, 다음과 같은 레일 도우미 메소드를 사용하는 경우
stylesheet_link_tag
기본 설정을 웹 서버에 그대로두면 자산이 일반적으로 잘 캐시됩니다.
답변
더 깔끔한 방법은 랙 미들웨어를 작성하는 것입니다. 랙 미들웨어는 일부 논리 (예 : application / xml mime-type)에 따라 Cache-Control 헤더를 변경합니다. 또는 추악하지만 여전히 작동하는 접근 방식의 경우 ActionDispatch :: Response :: DEFAULT_CACHE_CONTROL 상수를 ‘no-cache’로 변경할 수 있습니다. 물론 컨트롤러 및 / 또는 작업 세분성이 필요한 경우 컨트롤러에서이 작업을 수행하는 것이 좋습니다.
답변
참고 사항 : 캐시를 조건부로 지울 수 없습니다 (예 : 사용자가 이미있는 경우 before_filter
에만 호출하는 reset_cache
경우). 당신은 할 필요가 무조건 브라우저가이 시간, 그것은 다시로드 할 필요가있는 경우 새로운 요청을 그냥 볼 수 있도록하지 않기 때문에이 마지막 시간이 필요하지 않은 경우에도, 캐시를 지 웁니다.
예:
before_filter :reset_cache, if: :user_completed_demographics?
브라우저는 뒤로 버튼에서 원래 캐시 헤더를 사용하기 때문에 사용자가 방문한 후 다시 방문하는 것을 막을 수 없습니다.
before_filter :reset_cache
그러나 첫 번째 요청에서 브라우저가 no-cache, no-store, ...
페이지를 가져 와서 향후 페이지로드에 적용 하기 때문에 페이지를 새로 고치고 캐시를 삭제 한 후 분명히 작동 합니다.
답변
no_cache_control
보석.
침투 테스트 (BURP, Detectify 등)를 통과하기 위해 모든 응답에 대해이 작업을 수행해야하는 경우 모든 응답에 다음 헤더를 추가하기 위해이 Gem on Rails 4+를 설치할 수 있습니다.
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: -1
매력처럼 작동하며 실제로 인증을 요구하는 안전한 HTTPS 웹 응용 프로그램을 사용하기에 가장 적합한 방법입니다.