Ubuntu -> Apache -> Phusion Passenger -> Rails 2.3
La parte principal de mi sitio reacciona a tus clics. Por lo tanto, si hace clic en un enlace, lo enviará al destino y regenerará instantáneamente su página.
Pero, si presiona el botón Atrás, no verá la nueva página. Desafortunadamente, no se muestra sin una actualización manual; parece que el navegador lo está almacenando en caché. Quiero asegurarme de que el navegador no guarde en caché la página.
Por otra parte, yo no desea establecer lejano futuras fechas de caducidad de todos mis activos estáticos.
¿Cuál es la mejor manera de resolver esto? ¿Debo resolver esto en Rails? ¿Apache? Javascript?
Gracias por toda tu ayuda, Jason
Pobre de mí. Ninguna de estas sugerencias forzó el comportamiento que estoy buscando.
Tal vez hay una respuesta de JavaScript? Podría hacer que los rieles escriban una marca de tiempo en un comentario, luego haga que javascript verifique si los tiempos están dentro de los cinco segundos (o lo que sea que funcione). En caso afirmativo, bien, pero si no, ¿volver a cargar la página?
¿Crees que esto funcionaría?
Gracias por toda tu ayuda,
Jason
fuente
Cache-Control: no-store
mientras el navegador sea compatible con HTTP 1.1. Sección 14.9.2 Qué pueden almacenar los cachésutilizar:
http://api.rubyonrails.org/classes/ActionController/ConditionalGet.html#method-i-expires_now
fuente
expires_now
solo envía elno-cache
encabezado. Dependiendo del navegador, esto podría no ser suficiente. (Por ejemplo, Firefox quiere unano-store
conexión no HTTPS: developer.mozilla.org/en/docs/Using_Firefox_1.5_caching )no-store
también se necesita probar con Rails 5.2 y Chrome 77 .He usado esta línea con cierto éxito en el controlador. Funciona en Safari e Internet Explorer, pero no lo he visto funcionar con Firefox.
Para su segundo punto, si usa los métodos de ayuda de rails como
y deje la configuración predeterminada en su servidor web, los activos generalmente se almacenan en caché bastante bien.
fuente
1.year.ago
es innecesaria sobrecarga. Simplemente elija un momento arbitrario en el pasado comoFri, 01 Jan 1990 00:00:00 GMT
La forma más limpia sería escribir un middleware Rack, que cambia el encabezado Cache-Control en función de alguna lógica (por ejemplo, solo para la aplicación / xml tipo mime). O, para un enfoque más feo pero que todavía funciona, uno podría cambiar la constante ActionDispatch :: Response :: DEFAULT_CACHE_CONTROL a 'no-cache'. Por supuesto, si se requiere el controlador y / o la granularidad de la acción, entonces es mejor hacerlo en el controlador.
fuente
Punto de nota: no puede borrar condicionalmente el caché (como si un
before_filter
solo llamareset_cache
si el usuario ya ha estado allí). Necesita borrar incondicionalmente el caché, porque el navegador no realizará una nueva solicitud solo para ver si esta vez, necesita recargarse, aunque no fue necesario que la última vez.Ejemplo:
no funcionará para evitar que los usuarios regresen después de haber estado allí, ya que el navegador usa los encabezados de caché originales en el botón Atrás.
sin embargo, funcionará (después de actualizar la página y borrar el caché antes de agregar esto, obviamente), ya que, en la primera solicitud, el navegador obtendrá el
no-cache, no-store, ...
y lo aplicará a futuras cargas de página.fuente
no_cache_control
Joya.Si necesita hacer esto para todas las respuestas, por ejemplo, para pasar una prueba de penetración (BURP, Detectify, etc.), puede instalar esta Gema en Rails 4+ para agregar los siguientes encabezados a todas las respuestas:
Funciona a las mil maravillas y es realmente el camino correcto para las aplicaciones web HTTPS seguras que requieren autenticación para hacer cualquier cosa.
fuente