Come eseguire le intestazioni di cache HTTP

Qualcuno mi può aiutarmi con una domanda di cache HTTP?

Pensavo che se avessi impostato le intestazioni di richiesta "Expires" e "Cache-Control: max-age", un browser non avrebbe fatto una richiesta GET fino a quando non fosse passato il tempo massimo?

Il mio assistente sta vedendo un sacco di richieste GET condizionale e risponde con un 304. Tuttavia, vorrei eliminare questi GET condizionali se ansible e avere il browser solo chiedere una risorsa una volta che pensa che sia scaduto.

Ecco i dettagli che ricevi dagli strumenti sviluppatori di Chrome:

Request URL:http://localhost:8080/img/branding.gif Request Method:GET Status Code:304 Not Modified 

Richiedi intestazioni:

 Cache-Control:max-age=0 If-Modified-Since:Thu, 22 Jul 2010 10:54:34 GMT Referer:http://localhost:8080/ User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4 

Intestazioni di risposta:

 Cache-Control:max-age=2246400, s-maxage=0 Connection:Keep-Alive Content-Location:/img/branding.gif Content-Type:image/gif Date:Fri, 23 Jul 2010 15:06:10 GMT Expires:Fri, 07 Jan 2011 15:06:10 GMT Keep-Alive:timeout=15, max=100 Last-Modified:Thu, 22 Jul 2010 10:54:34 GMT Pragma:cache Server:Oracle Application Server Containers for J2EE 10g (9.0.4.0.0) 

Ho impostato le intestazioni di cache in un filter nel mio codice Java. Il codice è in esecuzione su Oracle OC4J.

Inoltre, voglio eseguire questo su HTTPS. Utilizzando le stesse intestazioni anche per HTTPS?

Grazie in anticipo.

  • Come creare due server privati ​​virtuali su un singolo server fisico?
  • come faccio a eseguire azioni root dall'account non root?
  • Buon libro per build siti web ad alte performance?
  • Perché la risposta a localhost è così lenta?
  • 50.000 file in una directory, qual è la mia scelta migliore?
  • Migliori pratiche per l'impostazione dell'ambiente LAMP multi-server
  • Quali estensioni di file continueranno ad essere OK con IIS?
  • Raccomandazione per il servizio di notifica quando il server web è in discesa
  • 2 Solutions collect form web for “Come eseguire le intestazioni di cache HTTP”

    se rimuovi l'ultima modifica e l'intestazione ETag, eliminerai totalmente le richieste If-Modified-Since e If-None-Match e le loro 304 non modificate risposte, in modo che un file rimanga memorizzato nella cache senza verificare gli aggiornamenti finchè l'intestazione Expires indica nuovi il contenuto è disponibile.

    fonte: http://www.askapache.com/htaccess/apache-speed-last-modified.html

    Pensavo che se avessi impostato le intestazioni di richiesta "Expires" e "Cache-Control: max-age", un browser non avrebbe fatto una richiesta GET fino a quando non fosse passato il tempo massimo?

    Il problema è quello che accade dopo che la scadenza del max-età è scaduta. Poi si entra in un brutto ciclo in cui il browser richiede il contenuto each volta che vede un riferimento ad esso – e each volta che il server web risponde con un 304 non modificato. Alcuni browser persino chiederanno each volta che un file viene visualizzato nella stessa pagina! La maggior parte del tempo impiegato per una richiesta è per i viaggi di andata e return per la stretta di mano TCP, quindi le intestazioni HTTP – per cui spesso questo risultato comporterà una pagina ancora più lenta perché hai fornito (quasi) i dettagli della cache. L'effetto è ancora peggiore per quanto riguarda SSL perché ciò comport alless un viaggio in più di andata e return al server.

    La clausola di output nella specifica è che il webserver può rispondere a una richiesta condizionale fornendo il file originale con nuove istruzioni di caching – ma in pratica questo può essere piuttosto difficile da fare.

    Se è apache 2.0 o successivo, puoi risolvere il problema spogliando le parti condizionate della richiesta usando mod_headers (rimuovi le linee if-modified-since e AND if-none-match nel header di richiesta). Per 1.3 o prima si può lavorare attorno ad un lavoro cron che tocca i file each N-giorni (where N è leggermente inferiore al tempo di cache predefinito).

    Inoltre, voglio eseguire questo su HTTPS. Utilizzando le stesse intestazioni anche per HTTPS?

    Sto ipotizzando che l'esempio che hai mostrato non sia SSL. Sì, questo metodo functionrà per non ssl, ma fai attenzione al browser mantenendovi vivo (il server web non Microsoft si aggrappa a nodes che cercano di parlare su una connessione SSL con Keep-alive, ma migliora molto le performance) .

    C.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.