7

Ho una pagina web che restituisce la seguente intestazione quando accedo materiale:Sostituisci i valori "cache-control" in una risposta HTTP

HTTP/1.1 200 OK 
Date: Sat, 29 Jun 2013 15:57:25 GMT 
Server: Apache 
Content-Length: 2247515 
Cache-Control: no-cache, no-store, must-revalidate, max-age=-1 
Pragma: no-cache, no-store 
Expires: -1 
Connection: close 

Utilizzando un'estensione Chrome, voglio modificare questo response header in modo che il materiale viene in realtà memorizzato nella cache invece di sprecare larghezza di banda.

Ho il seguente codice di esempio:

chrome.webRequest.onHeadersReceived.addListener(function(details) 
    { 
     // Delete the required elements 
     removeHeader(details.responseHeaders, 'pragma'); 
     removeHeader(details.responseHeaders, 'expires'); 

     // Modify cache-control 
     updateHeader(details.responseHeaders, 'cache-control', 'max-age=3600;') 

     console.log(details.url); 
     console.log(details.responseHeaders); 

     return{responseHeaders: details.responseHeaders}; 
    }, 
    {urls: ["<all_urls>"]}, ['blocking', 'responseHeaders'] 
); 

che modifica correttamente l'intestazione a qualcosa di simile (in base all'uscita console.log()):

HTTP/1.1 200 OK 
Date: Sat, 29 Jun 2013 15:57:25 GMT 
Server: Apache 
Content-Length: 2247515 
Cache-Control: max-age=3600 
Connection: close 

ma sulla base di tutto Ho provato a verificare questo, non vedo alcuna prova che ciò sia effettivamente accaduto:

  1. cache non contiene una voce per questo file
  2. La scheda Network nello Developer Console non mostra alcuna modifica alla risposta HTTP (ho provato a cambiarlo anche a modifiche banali solo per garantire che non sia un errore, ma ancora nessun cambiamento).

Gli unici suggerimenti reali che posso trovare sono il che suggerisce che il mio approccio funziona ancora e questo paragrafo sulla webRequest API documentation che suggerisce che questo non funzionerà (ma non spiega il motivo per cui non riesco a ottenere alcuna modifica qualunque):

Si noti che l'API di richiesta Web presenta un'astrazione dello stack di rete all'estensione. Internamente, una richiesta URL può essere divisa in diverse richieste HTTP (ad esempio per recuperare singoli intervalli di byte da un file di grandi dimensioni) o può essere gestita dallo stack di rete senza comunicando con la rete. Per questo motivo, l'API non fornisce le intestazioni HTTP finali che vengono inviate alla rete. Per l'esempio , tutte le intestazioni relative alla memorizzazione nella cache non sono visibili per l'estensione .

Nulla funziona (non posso modificare lo HTTP response header) quindi penso che sia la mia prima preoccupazione.

Qualche suggerimento su dove potrei andare storto o come cercare di capire cosa sta andando storto qui?

Se non è possibile, ci sono altri modi per ottenere ciò che sto cercando di ottenere?

risposta

5

Di recente ho trascorso alcune ore a cercare di ottenere un file memorizzato nella cache, e ha scoperto che le chrome.webRequest e chrome.declarativeWebRequest API non possono risorse di forza per essere memorizzati nella cache. In nessun modo.

Le intestazioni di risposta Cache-Control (e altre) possono essere modificate, ma saranno visibili solo nel metodo getResponseHeader. Non nel comportamento di memorizzazione nella cache.

+0

Sfortunatamente quello che mi aspettavo ... Conoscete altri modi per forzare questi file nella cache?Ho trovato server proxy come 'squid', ma mi sembrano un sacco di giocherellare con la rete sul mio sistema solo per memorizzare i file da un sito specifico –

+0

@BT Scegli il tuo proxy preferito che aggiunge le intestazioni giuste e usa il [' chrome .proxy'] (https://developer.chrome.com/extensions/proxy.html) API per instradare quel sito specifico attraverso il proxy. –

+0

È un vero peccato che non è possibile modificare la memorizzazione nella cache da un'estensione. Lo renderebbe molto più utile se potessi. –

Problemi correlati