- Konu sahibi
- #1
Apache’de
Bu kurallar Apache’nin ilgili dizinde .htaccess kullanımına izin vermesini gerektirir. Dosyanın bulunması tek başına etkin olduğunu göstermez. Uygulama, ters proxy veya CDN ayrıca başlık üretiyorsa tarayıcının gerçekten aldığı son yanıtı kontrol etmelisiniz.
Buradaki 30 gün bir örnek politikadır; her proje için zorunlu veya en iyi süre değildir.
Kullanıcı hesabı, sepet veya ödeme yanıtını yalnız dosya uzantısına göre sınıflandırmayın. Bir HTML adresi arka planda PHP ile üretilebilir. Hassas yanıtın politikasını uygulamanın gerçek yanıtında belirleyin; tüm
Örneğin aşağıdaki komut GET yanıtının başlıklarını gösterir, gövdeyi ekrana basmaz:
Örnekteki adresi kendi gerçek dosyanızla değiştirin. Yanıt başlığı bulunamazsa MIME eşleşmesini, .htaccess iznini ve aradaki CDN/proxy politikasını kontrol edin.
.htaccess üzerinden önbellek başlıkları ayarlarken önce yanıtın herkese açık mı, kullanıcıya özel mi olduğunu ayırın. mod_expires, MIME türüne göre Expires ve Cache-Control: max-age üretebilir. mod_headers ise başlıkları değiştirmek için kullanılır. Uzun süreyi bütün siteye uygulamak yerine sürümlenmiş statik dosyaları ayrı ele almak daha yönetilebilir bir başlangıçtır.Bu kurallar Apache’nin ilgili dizinde .htaccess kullanımına izin vermesini gerektirir. Dosyanın bulunması tek başına etkin olduğunu göstermez. Uygulama, ters proxy veya CDN ayrıca başlık üretiyorsa tarayıcının gerçekten aldığı son yanıtı kontrol etmelisiniz.
Herkese açık statik dosyalar için örnek
Varsayımsal bir sitede yalnız herkese açık CSS, JavaScript ve görselleri içerenassets dizini bulunduğunu düşünün. Değişen dosyaların adı da değişsin: app.v2.css gibi. Aşağıdaki örneği bu ayrı dizinin .htaccess dosyasında değerlendirin; site köküne veya özel yüklemelerin bulunduğu dizine körlemesine taşımayın:
Kod:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css "access plus 30 days"
ExpiresByType text/javascript "access plus 30 days"
ExpiresByType application/javascript "access plus 30 days"
ExpiresByType image/png "access plus 30 days"
ExpiresByType image/webp "access plus 30 days"
ExpiresByType font/woff2 "access plus 30 days"
</IfModule>
Buradaki 30 gün bir örnek politikadır; her proje için zorunlu veya en iyi süre değildir.
access sürenin erişim anından hesaplanmasını belirtir. MIME türü eşleşmezse ilgili kural uygulanmaz. IfModule modül yokken bloğu atlar; hata görülmemesi başlığın oluştuğunu kanıtlamaz.Kullanıcı hesabı, sepet veya ödeme yanıtını yalnız dosya uzantısına göre sınıflandırmayın. Bir HTML adresi arka planda PHP ile üretilebilir. Hassas yanıtın politikasını uygulamanın gerçek yanıtında belirleyin; tüm
text/html yanıtlarına uzun süre vermek kullanıcıya özel içeriği de etkileyebilir.| Politika | Anlamı | Uygun değerlendirme |
|---|---|---|
| max-age | Yanıtın taze sayılacağı süre | URL’si sürümlenen herkese açık varlık |
| no-cache | Yeniden kullanmadan önce doğrulama | Saklanabilir fakat güncelliği kontrol edilmeli |
| private | Paylaşımlı önbellekte saklanmamalı | Kişiye özel yanıt |
| no-store | Yanıtın saklanmaması istenir | Saklanması istenmeyen hassas içerik |
no-cache ile no-store aynı değildir. Ayrıca private tarayıcı önbelleğini bütünüyle kapatmaz. İçeriğin niteliğine göre politika seçin; yalnız bir yönerge görünce bütün güvenlik ve güncellik gereksinimlerinin karşılandığını varsaymayın.Uygulama ve doğrulama sırası
- Değiştireceğiniz dosyanın mevcut içeriğini güvenli bir kopyada koruyun; doğru dizini ve dosyaların gerçekten herkese açık olduğunu doğrulayın.
- Mevcut bir statik dosyanın MIME türünü ve Cache-Control/Expires başlıklarını kaydedin. CDN üzerinden gelen yanıtla origin yanıtı farklı olabilir.
- Yalnız seçilen dizine kural ekleyin. mod_expires için modülün ve ilgili AllowOverride Indexes izninin bulunmasını sağlayıcıyla doğrulayın.
- Aynı dosya için yeni bir GET yanıtı alın; beklenen max-age ve MIME değerlerini karşılaştırın. 500 hatasında son değişikliği geri alın ve aynı zamana ait Apache hata kaydını inceleyin.
Örneğin aşağıdaki komut GET yanıtının başlıklarını gösterir, gövdeyi ekrana basmaz:
Kod:
curl -sS -D - -o /dev/null https://example.com/assets/app.v2.css
Örnekteki adresi kendi gerçek dosyanızla değiştirin. Yanıt başlığı bulunamazsa MIME eşleşmesini, .htaccess iznini ve aradaki CDN/proxy politikasını kontrol edin.
Header set her yinelenen başlığı otomatik gidermez: Apache’nin onsuccess ve always listeleri ayrıdır; uygulama veya proxy de başlık ekleyebilir. Başlığı hangi katmanın ürettiğini belirlemeden üst üste yeni kurallar eklemeyin.