Ana içeriğe geç

Rehberler / HTTP durum kodları açıklandı

304 Not Modified: neden bir hata değil bir başarıdır

304 Not Modified bir başarıdır: kaynağın önbelleğe aldığınız kopyasının hala güncel olduğu anlamına gelir, bu yüzden sunucu hiçbir gövde göndermez ve size zaten sahip olduğunuzu yeniden kullanmanızı söyler. Yalnızca koşullu bir isteğe yanıt olarak ortaya çıkar; bu yüzden hiçbir önbellek başlığı göndermeyen bir izleme kontrolü buna asla rastlamaz.

Bir 304 nasıl gerçekleşir

Bir 304, iki adımlı bir konuşmanın ikinci yarısıdır. İlk istekte sunucu, kaynağı bir doğrulayıcıyla döndürür: o tam sürüm için opak bir tanımlayıcı olan bir ETag, ve genellikle bir Last-Modified tarihi. İstemci yanıtı bu doğrulayıcılarla birlikte saklar.

Daha sonra, önbelleğe alınmış kopyanın yeniden doğrulanması gerektiğinde, istemci isteği tekrarlar ve elindekini dahil eder:

  • If-None-Match: "abc123" saklanan ETag'i taşır. Bu, kesin olduğu için tercih edilen doğrulayıcıdır.
  • If-Modified-Since: Wed, 03 Sep 2026 10:00:00 GMT, ETag olmadığında kullanılan saklanan tarihi taşır.

Kaynak değişmemişse, sunucu yalnızca başlıklarla ve gövde olmadan 304 Not Modified yanıtı verir, ve istemci önbelleğe alınmış kopyasını işler. Değişmişse, sunucu yeni içerik ve yeni doğrulayıcılarla 200 yanıtı verir. Her iki sonuç da doğru davranıştır.

304 neden bir hata değil, iyi bir haberdir

İnsanlar bir tarayıcının ağ panelinde veya bir günlük analizöründe 304 görür, bunun bir 200 olmadığını fark eder, ve bir şeyin başarısız olduğunu varsayar. Hiçbir şey başarısız olmadı. Bir 304, webdeki en ucuz yararlı yanıttır: ağ üzerinden hiçbir yanıt gövdesi geçmez, bu yüzden aktarım tam varlık yerine birkaç yüz bayttır, ve sunucu genellikle kaynağı yeniden oluşturmaktan kaçınır, bu yüzden bir 200'den daha az CPU'ya mal olur. Sayfa daha hızlı işlenir çünkü tarayıcı zaten sahip olduğu baytları yeniden kullanır. Tarayıcılar (crawler) da yarar görür, çünkü 304 üreten kararlı bir ETag, bir arama motorunun tarama bütçesini değişen sayfalara harcamasını sağlar.

Statik varlıklarda yüksek bir 304 oranı, önbellekleme iyi yapılandırıldığının bir işaretidir. Dikkat edilmesi gereken tek şey, yeniden doğrulama gidiş dönüşüne gerçekten ihtiyacınız olup olmadığıdır: sürümlenmiş veya parmak izi eklenmiş varlıklar için, immutable ile uzun bir Cache-Control: max-age, tarayıcı sormadığı için 304'ü bile önler.

304 ne zaman bir sorundur

  • Yenilenmeyecek eski bir sayfa. HTML'iniz, içerik değişirken hiç değişmeyen bir doğrulayıcıyla sunuluyorsa, tarayıcılar 304 almaya devam eder ve kullanıcılar eski sayfayı görmeye devam eder. Bu, klasik "dağıttım ama kimse görmüyor" hatasıdır.
  • Eşleşen önbelleğe alınmış kopyası olmayan bir 304. Bir istemci, buna gerekçesi olmayan koşullu bir istek gönderirse, veya bir vekil sunucu bir 200'ün gövdesini çıkarırsa, istemcinin işleyecek hiçbir şeyi kalmaz ve sayfa boş görünür.
  • Bir yük dengeleyicinin arkasında zayıf veya kararsız ETag'ler. Birkaç arka uç aynı içerik için farklı ETag'ler ürettiğinde, her yeniden doğrulama ıskalar ve 304 beklenen yerde tam 200'ler alırsınız. Trafik hiçbir nedeni olmadan artar.
  • Doğrulayıcıyı değiştiren sıkıştırma. Doğru bir Vary: Accept-Encoding olmadan sıkıştırılmış ve sıkıştırılmamış varyantlar arasında ETag farklıysa, önbellekler yanlış şeyi sunabilir.

Koşullu istekler nasıl test edilir

  1. Kaynağı getirin ve doğrulayıcılarını okuyun:
    curl -sI https://example.com/style.css | grep -Ei "^(HTTP|etag|last-modified|cache-control)"
  2. İsteği aldığınız ETag ile tekrarlayın ve sunucunun 304 yanıtı verdiğini doğrulayın:
    curl -sI -H 'If-None-Match: "abc123"' https://example.com/style.css | head -n 1
    Tırnak işaretleri dahil tam ETag değerini yerine koyun. Burada bir 200, yeniden doğrulamanın çalışmadığı anlamına gelir.
  3. 304 beklerken 200 alıyorsanız, bir vekil sunucunun veya CDN'nin If-None-Match'i çıkarıp çıkarmadığını, ve arka uçlarınızın aynı dosya için ETag konusunda anlaşıp anlaşmadığını kontrol edin.
  4. Eski bir sayfa alıyorsanız, içerik değiştiğinde doğrulayıcının da değişmesini sağlayın. Parmak izi eklenmiş dosya adları en güvenilir düzeltmedir; aksi halde ETag'i içeriğin kendisinden türetin.
  5. HTML'i kısa bir tazelik ömründe tutun ve varlıkların uzun olanı taşımasına izin verin. Bir gün önbelleğe alınan HTML, bir dağıtımı görünmez kılan şeydir.

Çalışma süresi kontrolleri neden hiçbir zaman bir 304 görmez

Bir çalışma süresi kontrolü bir sayfayı ilk kez ziyaret eden biri gibi ister, If-None-Match veya If-Modified-Since olmadan, bu yüzden sunucunun karşılaştıracak hiçbir şeyi yoktur ve her zaman 200 yanıtı verir. Bu, erişilebilirlik için doğru varsayılandır. Ayrıca önbellekleme gerilemelerinin çalışma süresi verisinde hiç görünmediği anlamına da gelir: bir site, her kontrol yeşil kalırken herkese eski bir sayfa sunabilir. Yalnızca duruma değil sayfa içeriğine de iddia (assert) yapın, ve güncellenmeyi durdurmuş bir sayfa bir içerik uyuşmazlığı olarak görünür hale gelir. HostTracker 13 monitör türü sunar ve 2004'ten beri web sitelerini izliyor. Başlıkları ve durumu HTTP kontrol aracıyla test edin, ve bir 200 OK'in gerçekte neyi kanıtladığını ve tam 3xx ailesi rehberini görün.

Şimdi kontrol edin

Ücretsiz kontrolü kendi sitenizde çalıştırın - hesap gerekmez.

HTTP check

Bunu sürekli izleyin

Bir sorun çıktığı anda haberdar olun: HostTracker 300’den fazla konumdan kontrol eder ve size e-posta, SMS, Slack, Telegram ve daha fazlasıyla bildirim gönderir.

HostTracker özellikleri

Bu bölümde daha fazlası: HTTP durum kodları açıklandı