Duruk dosyaları önbelleğe almak, var olan en ucuz hızdır: tarayıcı hiç sormaz bile. Risk ise bunun tersidir — bir yıllığına önbelleğe alınmış, sonra da değiştirmeniz gereken bir biçem dosyası; üstelik ulaşamadığınız bir makinede.
Uzun önbelleklemeyi güvenli kılan kural
YALNIZCA içeriği değiştiğinde adı da değişen dosyaları hırsla önbelleğe alın. O zaman bir değişiklik yeni bir ad demektir, eski önbellek anlamını yitirir ve hiçbir ziyaretçi yanlış dosyayı elinde tutmaz.
/css/site.a1b2c3.css <- safe to cache for a year
/css/site.css?v=1788541047 <- the same idea, from the file mtime
Ne kurulmalı
location ~* \.(css|js|woff2|jpg|png|webp|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
location ~* \.(html|php)$ {
add_header Cache-Control "no-cache";
}
immutable, tarayıcıya yeniden doğrulamaya bile kalkışmamasını söyler. HTML üzerindeki no-cache ise "önbelleğe alma" demek değildir; "önce bana sor" demektir — ve bu, adresi değişmeden içeriği değişen bir sayfa için tam da doğrusudur.
Ne gönderdiğinizi denetleyin
curl -sI https://yourdomain.com/css/site.css | grep -iE "cache-control|expires|etag"
ETag ve Last-Modified
Bunlar isteği gereksiz kılmaz, DENETİMİ ucuzlatır: tarayıcı sorar, sunucu 304 Not Modified yanıtını verir ve hiçbir gövde gönderilmez. HTML için iyidir; varlıklar içinse hiç sormamanın ardından gelen ikinci en iyi seçenektir.