Forzar a Firefox a almacenar en caché una URL durante un período de tiempo específico

5

Una de las empresas con las que trabajo tiene una aplicación web alojada en una línea DSL lenta. Algo está mal con la configuración de su servidor o la versión del software que están utilizando, lo que significa que cada acceso a la página está provocando la descarga de una gran colección de bibliotecas JavaScript. Según Firebug, el contenido real de cada página se entrega con relativa rapidez.

¿Hay alguna manera de obligar a Firefox a considerar que una URL en particular tenga un período de vencimiento más largo?

Hace muchos años, solía hacer este tipo de cosas en las instalaciones de proxy de calamar con reglas de expresiones regulares personalizadas para forzar una edad mínima de caché para sitios que se comportan mal. Lo que estoy tratando de hacer parece similar pero puramente del lado del cliente.

davefiddes
fuente

Respuestas:

3

Manipular una entrada de caché en particular no es realmente posible, ni siquiera las extensiones de Firefox tienen ese nivel de acceso. Sin embargo, es posible manipular los encabezados que devuelve el servidor. Desafortunadamente, todas las extensiones existentes se centran en manipular los encabezados de solicitud en lugar de los encabezados de respuesta. Pero una extensión para eso sería realmente simple. Entonces, tal vez quieras probar esa ruta antes de instalar Squid nuevamente. Aquí está el código para una extensión como esa:

install.rdf

<?xml version="1.0" encoding="utf-8"?>

<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#">
  <Description about="urn:mozilla:install-manifest">
    <em:id>[email protected]</em:id>
    <em:version>1.0</em:version>
    <em:type>2</em:type>
    <em:bootstrap>true</em:bootstrap>

    <!-- Firefox -->
    <em:targetApplication>
      <Description>
        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
        <em:minVersion>8.0</em:minVersion>
        <em:maxVersion>99.0</em:maxVersion>
      </Description>
    </em:targetApplication>

    <!-- Front End MetaData -->
    <em:name>Caching header manipulation</em:name>
  </Description>
</RDF>

bootstrap.js

Components.utils.import("resource://gre/modules/Services.jsm");
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");

function install(data, reason) {}
function uninstall(data, reason) {}

function startup(data, reason)
{
  Services.obs.addObserver(Observer, "http-on-examine-response", true)
};

function shutdown(data, reason)
{
  Services.obs.removeObserver(Observer, "http-on-examine-response")
};

var Observer =
{
  observe: function(subject, topic, data)
  {
    if (subject instanceof Components.interfaces.nsIHttpChannel &&
        subject.URI.host == "cdn.sstatic.net")
    {
      subject.setResponseHeader("Cache-Control", "max-age=2592000", false);
    }
  },

  QueryInterface: XPCOMUtils.generateQI([
    Components.interfaces.nsIObserver,
    Components.interfaces.nsISupportsWeakReference
  ])
};

Coloque estos dos archivos en un archivo ZIP y cámbiele el nombre headermanip.xpi; listo, tiene una extensión que cambiará el encabezado del almacenamiento en caché para que todo lo que venga cdn.sstatic.net(utilizado en este sitio) caduque después de 30 días en lugar de los 7 días habituales. Si desea que suceda en un host diferente, cambie el subject.URIregistro bootstrap.js. También puede verificar subject.URI.specsi desea ver la URL completa en lugar de solo el host.

Wladimir Palant
fuente
0

El complemento BetterCache parece prometedor, pero su lista blanca y su lista negra parecen funcionar solo en tipos MIME, no en URL, y según una revisión text/javascriptdeberían incluirse en la lista negra para que algunos captchas funcionen correctamente.


No creo que haya una forma integrada de hacer esto.

...
...

Y aquí es donde alguien demuestra que estoy equivocado.


Siempre puedes instalar squid localmente (en la misma computadora), eso es técnicamente del lado del cliente ...

Mover
fuente