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

HTTP 304 nedir?​


HTTP 304 Not Modified, koşullu GET veya HEAD isteği için eldeki temsili yeniden kullanmayı bildiren HTTP yanıtıdır. Kod sınıfı 3xx'tir; 2xx başarı koduyla aynı sınıfta değildir. Sunucu bu yanıtta kaynak içeriğini yeniden göndermez; tarayıcı veya CDN, daha önce kaydettiği kopyayı kullanır. Bu nedenle 304 bir hata değildir ve genellikle bant genişliğini, yanıt gövdesi aktarımını ve gereksiz sunucu yükünü azaltır.

HTTP 304 nasıl çalışır?​


İlk istekte sunucu dosyayı normal olarak, çoğunlukla 200 OK yanıtıyla gönderir. Yanıtla birlikte kaynağın değişip değişmediğini kontrol etmeye yarayan bir doğrulayıcı da verebilir:

  • ETag: Dosyanın veya yanıtın belirli sürümünü temsil eden etiket.
  • Last-Modified: Kaynağın son değiştirilme zamanını belirten tarih.

Tarayıcı daha sonra yeniden kontrol yapmak istediğinde bu bilgiyi koşullu istek başlıklarıyla gönderir. Örneğin If-None-Match ile ETag değerini, If-Modified-Since ile son değiştirilme zamanını iletebilir.

Kaynak değişmemişse sunucu 304 döndürür. Tarayıcı, kendi önbelleğindeki önceki gövdeyi kullanır. Kaynak değişmişse sunucu yeni içeriği 200 OK ile gönderir. 304 yanıtı içerik gövdesi taşıyamaz; asıl dosya tarayıcıda zaten vardır.

Somut örnek​


Bir CSS dosyası ilk istekte şu doğrulayıcıyla döndürülsün:

Kod:
ETag: "site-css-v3"

Tarayıcı dosyayı önbelleğe aldıktan sonra şu koşullu isteği yapabilir:

Kod:
GET /assets/site.css HTTP/1.1
Host: example.com
If-None-Match: "site-css-v3"

Sunucudaki dosyanın ETag değeri hâlâ "site-css-v3" ise yanıt 304 Not Modified olur. Tarayıcı mevcut CSS kopyasını kullanır. Dosyada değişiklik yapılıp ETag "site-css-v4" olduğunda ise sunucu 200 OK ve yeni dosya içeriğini döndürmelidir.

Basit bir teşhis için kendi dosya adresinizle başlıkları inceleyebilirsiniz:

Kod:
curl -I https://example.com/assets/site.css

Koşulsuz kontrolde normalde 200 veya kaynağın gerçek başka yanıtını görürsünüz; yalnız curl -I çalıştırmak doğru çalışan sunucuda kendiliğinden304 üretmez. Önce dönen gerçek ETag'i alın, sonra onunla koşullu GET gönderin. Örneğin ETag gerçekten aşağıdaki değerse:

Kod:
curl -i -H 'If-None-Match: "site-css-v3"' https://example.com/assets/site.css

Bu değer ve URL kurgu örnektir. Doğrulayıcı hâlâ eşleşiyorsa 304; değişmişse normal koşullarda200 ve yeni temsil beklenir. PowerShell'de gerekirse curl.exe kullanın.

Durumu nasıl yorumlamalı?​


304 kodunu tek başına başarı veya sorun göstergesi olarak değerlendirmeyin. Önemli olan, kaynağın gerçekten değiştiğinde yeni sürümün istemciye ulaşıp ulaşmadığıdır.

Gözlenen durumAnlamıKontrol edilecek nokta
200 OKİçerik sunucudan gönderildi.Yanıt gövdesi ve önbellek başlıkları
304 Not ModifiedÖnbellekteki kopya yeniden kullanılabilir.ETag veya Last-Modified doğrulaması
200 yerine eski içerikÖnbellek doğrulaması veya sürümleme hatalı olabilir.Dosya adı, ETag, CDN ve Cache-Control ayarları
412 Precondition FailedKoşullu istek önkoşulu karşılanmadı.İsteğin kullandığı koşul başlıkları

Yeni bir dosyanın yayınlandığı hâlde kullanıcı eski dosyayı görüyorsa şu sırayla ilerleyin:

  1. Tarayıcı geliştirici araçlarında isteğin durum kodunu ve yanıt başlıklarını inceleyin.
  2. İstekte If-None-Match veya If-Modified-Since gönderilip gönderilmediğini kontrol edin.
  3. Sunucunun gönderdiği ETag ve Last-Modified değerlerini, gerçekten yayınlanan dosyayla karşılaştırın.
  4. CDN, ters vekil veya uygulama önbelleği kullanılıyorsa aynı isteği doğrudan kaynak sunucuda da test edin.
  5. Statik dosya adı değişmiyorsa, dağıtım sisteminde dosya sürümleme kullanın; örneğin site.v4.css gibi yeni bir dosya adı yayınlayın. HTML içindeki referans da bu yeni ada çevrilmelidir.
  6. Değişiklik doğru sunuluyor fakat tarayıcı eski kopyayı kullanıyorsa önbellek politikası ile dağıtım katmanlarının geçerlilik sürelerini birlikte gözden geçirin.

Sık yapılan hatalar​


304 yanıtını sunucunun dosyayı tekrar oluşturamadığı veya sayfanın bozuk olduğu şeklinde yorumlamak yanlıştır. Ayrıca 304 almak, dosyanın mutlaka en güncel sürüm olduğu anlamına gelmez; sunucu yanlış veya değişmeyen bir ETag üretiyorsa istemci eski içeriği geçerli sanabilir. Dosya değiştiğinde doğrulayıcı değerinin de güvenilir biçimde değişmesi gerekir.

Sık sorulan sorular​


304 yanıtı SEO açısından hata mıdır?​


Hayır. 304, önbellek doğrulaması için kullanılan normal bir HTTP davranışıdır. Arama motoru veya başka bir istemci kaynağı yeniden indirmeden önceki kopyasını kullanabilir. İçeriğin yanlış sürümü sunuluyorsa sorun durum kodundan çok önbellek veya doğrulayıcı yapılandırmasındadır.

İki doğrulama başlığı birlikte gönderilirse hangisi önceliklidir?​


If-None-Match varsa sunucu If-Modified-Since koşulunu göz ardı eder. Bu yüzden yalnız tarihe bakarak yanıtın hatalı olduğuna karar vermeyin; istekteki ETag'i ve seçilen temsilin etiketini de karşılaştırın.

304 almak her zaman performansın iyi olduğu anlamına gelir mi?​


Hayır. 304 gövde aktarımını azaltır ancak istemci yine de sunucuya doğrulama isteği gönderir. Yüksek gecikme, hatalı CDN yapılandırması veya gereksiz yeniden doğrulama varsa toplam yükleme süresi yine yüksek olabilir.
 

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.
Robotlar:
  • Anthropic