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:
cache
non contiene una voce per questo file- La scheda
Network
nelloDeveloper 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?
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 –
@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. –
È un vero peccato che non è possibile modificare la memorizzazione nella cache da un'estensione. Lo renderebbe molto più utile se potessi. –