Quali intestazioni dovrei inviare per interrompere completamente tutte le richieste al server dopo che il contenuto è stato memorizzato nella cache?
Abbiamo un server a latenza molto alta (Sigh, VMWare), quindi anche l'invio di una HEAD
richiesta al server richiede + 40ms.
Attualmente queste sono le intestazioni inviate / ricevute;
Prima richiesta
Il cliente invia;
GET http://dugong:8080/Rvi24mYJkxFRGNzq73PPvgWGh1j/IMG_2071.jpg HTTP/1.1
Host: dugong:8080
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20100101 Firefox/9.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Pragma: no-cache, no-cache, no-cache
Cache-Control: no-cache, no-cache, no-cache
Il server risponde;
HTTP/1.1 200 OK
Server: nginx/1.0.11
Date: Wed, 01 Feb 2012 14:51:51 GMT
Content-Type: text/plain
Vary: Accept-Encoding
Last-Modified: Tue, 31 Jan 2012 10:45:11 GMT
Content-Length: 14
Expires: Thu, 31 Jan 2013 14:51:51 GMT
Cache-Control: max-age=31536000
Quindi invia a Cache-Control
e Expires
header impostato a 365 giorni in futuro. Sfortunatamente al secondo aggiornamento richiede nuovamente l'oggetto con If-Modified-Since
un'intestazione.
Seconda richiesta
GET http://dugong:8080/Rvi24mYJkxFRGNzq73PPvgWGh1j/IMG_2071.jpg HTTP/1.1
Host: dugong:8080
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20100101 Firefox/9.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
If-Modified-Since: Tue, 31 Jan 2012 10:45:11 GMT
Cache-Control: max-age=0
Risposta;
HTTP/1.1 304 Not Modified
Server: nginx/1.0.11
Date: Wed, 01 Feb 2012 14:58:00 GMT
Vary: Accept-Encoding
Expires: Thu, 31 Jan 2013 14:58:00 GMT
Cache-Control: max-age=31536000
Sfortunatamente a causa di software proxy stupidamente obsoleto che non possiamo usare Keep-Alive
o mettere altri server / proxy davanti all'applicazione. Inoltre, non possiamo migliorare le prestazioni del server e ridurre la latenza della rete. Ho cercato di capire quali intestazioni possiamo inviare per sbarazzarci delle 301 richieste. Ho provato a usare ETags ma questo non fa differenza, invia comunque If-modified-since
un'intestazione. Ho anche provato a rimuovere l' Last-Modified
intestazione, ma ciò causa solo una richiesta GET standard senza memorizzazione nella cache (controllati i registri, il server continua a ricevere richieste).
I client sono un mix di Firefox (principalmente), IE 7, 8 e (alcuni) 9, Chrome e Safari, ma questo comportamento sembra comparire in tutti i browser testati.
TL; DR;
Rete terribile, quali intestazioni dovrei inviare per dire ai clienti di non inviare mai maiIf-modified-since
richieste al server per convalidare la loro cache e mantenere il contenuto nella cache fino a quando non Expires
viene soddisfatta l' intestazione?
Probabilmente mi manca qualcosa di ovvio, ma tutto ciò che provo sembra produrre gli stessi risultati.
Abbiamo un server NGINX posizionato di fronte al nostro server delle applicazioni in modo da poter aggiungere / rimuovere qualsiasi intestazione come mi pare. Il nostro proxy non supporta Keep-Alive e non è in alcun modo possibile migliorare le prestazioni della rete. A causa del terribile design del software, l'app Web carica +100 risorse per ogni caricamento della pagina (Sì, il software aziendale fa schifo) con una latenza di ~ 40-50ms per oggetto.
text/plain
?