Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
Apache’de .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çeren assets 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.

PolitikaAnlamıUygun değerlendirme
max-ageYanıtın taze sayılacağı süreURL’si sürümlenen herkese açık varlık
no-cacheYeniden kullanmadan önce doğrulamaSaklanabilir fakat güncelliği kontrol edilmeli
privatePaylaşımlı önbellekte saklanmamalıKişiye özel yanıt
no-storeYanıtın saklanmaması istenirSaklanması 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ı​

  1. 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.
  2. 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.
  3. 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.
  4. 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.

Sık sorulan sorular​

Yeni no-store başlığı eski önbellek kopyalarını temizler mi?​

Hayır. Daha önce taze sayılan yanıtı saklayan ara önbellek sunucuya yeni istek yapmıyorsa yeni başlığı henüz görmez. Güncellenen statik dosyada yeni URL kullanmak ve CDN’nin kendi geçersizleştirme yöntemini değerlendirmek ayrı işlemlerdir.

304 yanıtı önbellek hatası mıdır?​

Hayır. Koşullu istekte sunucu kaynağın değişmediğini bildiriyorsa 304 ile gövdeyi yeniden göndermeyebilir. İstemci sakladığı temsili kullanır. Bu, yeniden doğrulamanın parçasıdır; beklenmeyen içerikte önce hangi URL’nin ve doğrulama başlıklarının kullanıldığını inceleyin.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.