Cum se configurează antetele Cache-Control în Apache

  • Anthony Heddings
  • 29 iulie 2020, 11:00am EDT

apache

Care browser al utilizatorului utilizează o memorie cache încorporată pentru a stoca obiectele descărcate, ceea ce poate accelera semnificativ vizitele repetate pe site-ul dvs. web prin încărcarea de pe disc mai degrabă decât din rețea. Iată cum să o configurați în Apache.

Cum funcționează memoria cache?

Prima dată când un utilizator se conectează la site-ul dumneavoastră, acesta va descărca toate resursele statice necesare pentru a reda pagina, inclusiv lucruri precum logo-ul dumneavoastră. Atunci când navighează către o nouă pagină, aceasta va încărca logo-ul dvs. din memorie, în loc să îl ceară din nou, accelerând semnificativ performanța și reducând, în acest proces, încărcarea serverului dvs. web.

Aceasta este o memorie cache pe partea clientului, dar multe site-uri vor folosi, de asemenea, o rețea de livrare de conținut, sau CDN. Un CDN este o rețea de servere care se află în fața serverului dvs. web principal, sau a serverului „de origine”. Această rețea stochează paginile dvs. în memoria cache, mărind lățimea de bandă maximă, reducând latența de acces și reducând foarte mult presiunea asupra serverului de origine. Dacă doriți să aflați mai multe despre CDN-uri, puteți citi ghidul nostru despre acestea aici.

Cache-Control este un antet pe care îl puteți configura pentru ca serverul dvs. web să îl adăugați la toate cererile de ieșire, care va indica browserului și CDN-urilor cum să vă pună în cache conținutul.

Publicitate

Certe pagini nu ar trebui să fie niciodată puse în cache de către cache-uri partajate precum CDN-urile. Făcând acest lucru, riscați să afișați informațiile personale ale unui utilizator altora. Ca regulă generală, dacă pagina va fi exact aceeași pentru toți utilizatorii, cum ar fi pagina dvs. de pornire, o puteți pune în cache. În cazul în care afișează informații confidențiale ale utilizatorului, trebuie să o treceți pe lista neagră din memoria cache. Resursele statice, cum ar fi CSS și imaginile, pot fi, de obicei, stocate în memoria cache pentru toată lumea, adesea pentru mult mai mult timp.

Cantitatea de timp pe care o petrec obiectele în memoria cache este, de asemenea, importantă. Denumită Time-To-Live (TTL), vârsta maximă a resurselor dvs. din memoria cache determină cât timp va rămâne obiectul în memoria cache înainte de a fi invalidat și de a solicita utilizatorului să solicite un nou obiect. Pentru resursele statice care nu se schimbă prea mult, puteți seta valori TTL foarte mari, de obicei în jur de doi ani. Pentru lucrurile pe care s-ar putea să doriți să le actualizați, veți dori să setați valori TTL mai mici pentru a preveni ca resursele vechi să rămână prea mult timp în memoria cache.

Puteți folosi întotdeauna nume de fișiere cu versiune pentru a declanșa o reîncărcare a memoriei cache. Dacă lansați o nouă versiune a unei foi de stil CSS, o puteți numi styles-1.0.1.css, iar browserul utilizatorului (și orice CDN din fața sa) o va vedea ca pe un fișier nou care trebuie reîncărcat. În plus, pentru unele CDN-uri, puteți emite invalidări manuale pentru a goli memoria cache existentă fără a schimba niciun nume de fișier.

Cum se utilizează Cache-Control în Apache

Cache-Control are câteva opțiuni:

  • public – Poate fi pus în memoria cache de către oricine, inclusiv browsere și CDN-uri. Utilizați această opțiune pentru majoritatea obiectelor statice.
  • private – Conține date sensibile care nu pot fi stocate în memoria cache de către CDN-uri sau proxies inversați. Browserul utilizatorului poate să le pună în cache local. Utilizați acest lucru pentru majoritatea paginilor autentificate.
  • no-cache – În ciuda numelui, nu dezactivează memoria cache. Browserul poate în continuare să pună în cache răspunsul pentru performanță, dar trebuie să verifice cu serverul de origine pentru actualizări înainte de a-l utiliza. Folosiți această opțiune dacă doriți ca utilizatorul să revalideze de fiecare dată.
  • no-store – Dezactivează în întregime memoria cache. Utilizați acest lucru numai pentru date foarte sensibile care nu ar trebui să fie trimise de două ori.

În mod suplimentar, puteți adăuga directiva no-transform, care dezactivează orice conversii care pot fi efectuate asupra resursei. De exemplu, unele CDN-uri comprimă imaginile pentru a reduce lățimea de bandă. Această directivă dezactivează acest comportament.

În Apache, va trebui să setați manual acest antet folosind directiva Header set, astfel:

Header set Cache-Control "max-age=84600, public"

Valoarea max-age este setată în secunde, de exemplu, max-age=300 pentru un TTL de cinci minute și max-age=63072000 pentru doi ani.

Publicitate

Puteți pune această directivă în rădăcina configurației dvs. pentru a o aplica la nivelul întregului site, dar o metodă mai bună este să aplicați setările în funcție de tipul de fișier. De exemplu, pentru a seta un TTL ridicat pentru majoritatea mediilor statice, puteți utiliza un bloc FilesMatch:

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$"> Header set Cache-Control "max-age=63072000, public" </FilesMatch>

Dacă doriți să puneți pe lista neagră o anumită cale pentru a nu fi pusă în memoria cache de către CDN-uri, puteți utiliza un bloc Directory:

<Directory "/private"> Header set Cache-Control "max-age=300, private" </Directory> 

Sau pur și simplu potriviți un singur fișier:

<File "protected.html"> Header set Cache-Control "max-age=300, private" </File>

Blocurile cu potriviri mai specifice vor avea prioritate față de potrivirile regex generale, dar veți dori să verificați dacă totul este setat corect la capătul receptor. Puteți verifica acest lucru din Chrome’s DevTools, la rubrica Network > Headers.

chrome devtools network tab

Dacă aveți acces doar la configurația .htaccess, puteți folosi în continuare potrivirea directoarelor prin crearea unui nou fișier .htaccess în fiecare subdirectorat.

Utilizați Surrogate-Control pentru a modifica direct comportamentul CDN

În antetul Surrogate-Control funcționează exact ca Cache-Control, dar detaliază instrucțiuni specifice pentru CDN-uri și proxies inversați, mai degrabă decât pentru utilizatorii finali. În acest fel, puteți să le spuneți CDN-urilor să facă un lucru, dar să trimită direcții diferite către browser.

Publicitate

Trebuie să setați acest antet manual, în același mod în care ați setat Cache-Control:

Header set Surrogate-Control "max-age=300, public"

Vreți cu siguranță să testați cu CDN-ul dvs. pentru a verifica dacă acest lucru funcționează – Surrogate-Control este destul de nou și nu este universal.

Anthony Heddings
Anthony Heddings este inginerul cloud rezident pentru LifeSavvy Media, scriitor tehnic, programator și expert în platforma AWS de la Amazon. El a scris sute de articole pentru How-To Geek și CloudSavvy IT care au fost citite de milioane de ori.Read Full Bio ”

Lasă un răspuns

Adresa ta de email nu va fi publicată.