• +34 - 607 571 659
  • info@oscarperez.es

Obligar a cargar los ficheros js y css siempre que se visite la página

Obligar a cargar los ficheros js y css siempre que se visite la página

A veces, cuando desarrollo un nuevo proyecto, y sabemos que va a seguir creciendo con el tiempo, me encuentro con el problema que los archivos js y css, el navegador los “cachea” y no carga los nuevos que han sido modificados. Si el desarrollo lo fuera a usar únicamente yo, con hacer Ctrl-F5 en el navegador ya estoy obligando al navegador a “forzar” la carga desde el servidor, pero lo más normal es que este desarrollo lo use un cliente, y no estaría bien decirle que cada vez que entre en la web haga Ctrl-F5.

Cómo pasa siempre cuando hay dudas, lo mejor es acudir a los que saben. Puse esta pregunta en stackoverflow.com y enseguida me dieron varias respuestas. Ver hilo

De las opciones que me dieron, las que mas me gustaron fueron:

Añadir a la URL un timestamp o número random para forzar a que se considere una URL distinta y que el navegador crea que no la ha visitado antes. Por ejemplo: http://my-server/my-script.js?ts=123412341 o http://my-server/my-stylesheet.css?ts=54352435

Puedes modificar tu .htaccess para prevenir el caché.

De estas dos opciones, pues que cada uno eliga la que más le guste, le resulte fácil o accesible. Si puedes acceder a tu servidor, modifica el .htacces; si no puedes acceder a tu servidor, añade un timestamp a las url de tus ficheros js, css.

Si eliges la segunda opción, tienes que añadir en el .htaccess lo siguiente:

# DISABLE CACHING
<IfModule mod_headers.c>
    Header set Cache-Control "no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires 0
</IfModule>

#listado de extensión de ficheros que no queresmos que se cachée
<FilesMatch "\.(css|flv|gif|htm|html|ico|jpe|jpeg|jpg|js|mp3|mp4|png|pdf|swf|txt)$">
    <IfModule mod_expires.c>
        ExpiresActive Off
    </IfModule>
    <IfModule mod_headers.c>
        FileETag None
        Header unset ETag
        Header unset Pragma
        Header unset Cache-Control
        Header unset Last-Modified
        Header set Pragma "no-cache"
        Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
        Header set Expires "Thu, 1 Jan 1970 00:00:00 GMT"
    </IfModule>
</FilesMatch>

Espero que os sirva

Oscar Pérez Gómez