Il browser di ogni utente utilizza una cache integrata per salvare gli oggetti scaricati, che può accelerare significativamente le visite ripetute al tuo portale web caricandolo dal disco invece che dalla rete. Prossimo, spiega come configurarlo in Apache.
Come funziona la memorizzazione nella cache??
La prima volta che un utente si connette al tuo sito, scaricherà tutte le risorse statiche necessarie per il rendering della pagina, inclusi elementi come il tuo logo. Quando navigano in una nuova pagina, caricherà il tuo logo dalla memoria invece di richiederlo di nuovo, che accelererà notevolmente le prestazioni e ridurrà il carico sul tuo server web nella procedura.
Questa è una cache lato client, ma molti siti utilizzeranno anche una rete di distribuzione dei contenuti o CDN. Un CDN è una rete di server che si trova di fronte al tuo server web principale, il server “di un ramo è un URL da cui il tuo”. Questa rete memorizza nella cache le tue pagine, aumentare la larghezza di banda massima, riducendo la latenza di accesso e riducendo notevolmente lo stress sul server di origine. Per maggiori informazioni sui CDN, puoi leggere la nostra guida qui.
Cache-Control
è un'intestazione che puoi configurare il tuo server web per aggiungere a tutte le richieste in uscita, che dirà al browser e ai CDN come memorizzare nella cache il loro contenuto.
Alcune pagine dovrebbero Mai essere memorizzato nella cache da cache condivise come CDN. Se lo fa, rischierà mostrare le informazioni personali di un utente ad altri. Come regola generale, se la pagina sarà esattamente la stessa per tutti gli utenti, come la tua home page, può memorizzarlo nella cache. Se mostra informazioni riservate sull'utente, vorrai metterlo nella lista nera dalla tua cache. Risorse statiche, come CSS e immagini, generalmente può essere memorizzato nella cache per tutti, spesso per molto più tempo.
Anche la quantità di tempo che gli oggetti trascorrono nella cache è essenziale. Conosciuto come il tempo della vita (TTL), l'età massima delle risorse memorizzate nella cache determina per quanto tempo l'oggetto rimarrà nella cache prima di essere invalidato e richiedere all'utente di richiedere un nuovo oggetto. Per risorse statiche che non cambiano molto, può determinare valori TTL molto alti, generalmente circa due anni. Per cose che potresti voler aggiornare, ti consigliamo di impostare valori TTL più bassi per evitare che le risorse obsolete vengano memorizzate nella cache per troppo tempo.
Puoi sempre usare nomi di file con versione per attivare un ricaricamento della cache. Se pubblichi una nuova versione di un foglio di stile CSS, puoi nominarlo styles-1.0.1.css
, e il browser dell'utente (e qualsiasi CDN di fronte ad esso) lo vedrai come un nuovo file che deve essere scaricato di nuovo. Allo stesso tempo, per alcuni CDN, puoi eseguire sostituzioni manuali per svuotare la cache esistente senza modificare alcun nome di file.
Come usare Cache-Control in Apache
Cache-Control
hai alcune opzioni:
public
– Chiunque può memorizzarlo nella cache, inclusi browser e CDN. Usalo per la maggior parte degli oggetti statici.private
– Contiene dati sensibili che non possono essere memorizzati nella cache tramite CDN o proxy inversi. Il browser dell'utente può memorizzarlo nella cache locale. Usa questo per la maggior parte delle pagine autenticate.no-cache
– Nonostante il nome, non disabilitare la memorizzazione nella cache. Il browser può ancora memorizzare nella cache la soluzione per le prestazioni, ma è necessario verificare con il server di origine gli aggiornamenti prima di utilizzarlo. Usa questo se vuoi che l'utente riconvalidi ogni volta.no-store
– Disabilita completamente la memorizzazione nella cache. Usalo solo per dati altamente riservati che non devono essere inviati due volte.
Allo stesso tempo, puoi aggiungere il no-transform
direttiva, che disabilita qualsiasi conversione effettuabile sulla risorsa. Come esempio, alcuni CDN comprimono le immagini per ridurre la larghezza di banda. Questa direttiva disabilita quel comportamento.
In Apache, dovrai impostare questa intestazione manualmente usando il Header set
direttiva, Così:
Header set Cache-Control "età massima=84600, pubblico"
il max-age
Il valore è impostato in secondi, come esempio, max-age=300
per cinque minuti TTL, e max-age=63072000
per due anni.
Puoi mettere questa direttiva nella radice della tua configurazione per applicarla all'intero sito, ma un metodo migliore è applicare le impostazioni in base al tipo di file. Come esempio, per determinare un TTL elevato per la maggior parte dei media statici, puoi usare a FilesMatch
bloccare:
<FileMatch ".(ico|PDF|flv|jpg|jpeg|png|gif|js|css|swf)$"> Header set Cache-Control "età massima=63072000, pubblico" </FileMatch>
Se vuoi inserire nella blacklist un percorso specifico in modo che non venga memorizzato nella cache da CDN, puoi usare a Directory
bloccare:
<Elenco "/privato"> Header set Cache-Control "età massima=300, privato" </Elenco>
O semplicemente abbina un singolo file:
<File "protetto.html"> Header set Cache-Control "età massima=300, privato" </File>
I blocchi con corrispondenze più specifiche avranno la precedenza sulle corrispondenze regex generali, ma ti consigliamo di verificare che tutto sia impostato correttamente sul lato ricevente. Puoi verificarlo da DevTools di Chrome, in Rete> Intestazioni.
Se hai accesso solo a .htaccess
collocamento, puoi ancora usare la corrispondenza delle directory creandone una nuova .htaccess
file in ogni sottodirectory.
IMPARENTATO: Come trovare la cartella di configurazione di Apache
Usa Surrogate-Control per modificare direttamente il comportamento del CDN
il Surrogate-Control
l'intestazione funziona esattamente come Cache-Control
, ma dettaglia istruzioni specifiche per CDN e proxy inversi, invece degli utenti finali. In questo modo, puoi dire ai CDN di fare una cosa, ma inviano indirizzi diversi al browser.
Dovrai configurare questa intestazione manualmente, nello stesso modo in cui hai impostato Cache-Control
:
Set di intestazione Surrogate-Control "età massima=300, pubblico"
Sicuramente vorrai testare con il tuo CDN per verificare che funzioni.Surrogate-Control
è abbastanza nuovo e non è universale.