Bugün üçüncü kez favori haber sitenizde geziniyorsunuz. Yenile'ye tıklıyorsunuz ve sayfa neredeyse anında yükleniyor. Arka planda, tarayıcınız sitenin logosunu, CSS stil sayfasını veya JavaScript dosyalarını aslında tekrar indirmedi. Zaten onlara sahipti. Sadece değişip değişmediklerini kontrol etmek için sunucuyla iletişime geçti ve sunucu basit, tek satırlık bir yanıt verdi: 304 Not Modified
.
Bu minik, verimli durum kodu, web performansının isimsiz kahramanlarından biridir. Modern web'in hızlı ve duyarlı hissetmesinin nedenidir. Önbelleğe almanın temelini oluşturur ve her gün milyarlarca gigabayt bant genişliğinden tasarruf sağlar. İlk bakışta, bir yönlendirme veya hata kodu kadar heyecan verici görünmeyebilir, ancak inanın bana, web sitelerini ve API'leri daha hızlı ve daha verimli hale getirmek için en güçlü araçlardan biridir.
304
bir hata değildir; başarılı, verimli bir onaydır. Sunucunun "Bu dosyanın en son sürümü zaten yerel olarak kaydedilmiş. Tekrar göndermeme gerek yok. Sende olanı kullan." deme şeklidir.
Bu blog yazısında, 304 Not Modified'ın ne anlama geldiğini, nasıl çalıştığını, neden önemli olduğunu ve geliştiricilerin daha hızlı, daha duyarlı web siteleri ve API'ler oluşturmak için bunu nasıl kullanabileceğini derinlemesine inceleyeceğiz. Eğer bir geliştiriciyseniz, 304
'ün nasıl çalıştığını anlamak, hızlı, verimli ve ölçeklenebilir uygulamalar oluşturmak için çok önemlidir.
Başlamadan önce, web sunucularınızın veya API'lerinizin 304 Not Modified gibi yanıtları nasıl ele aldığını test etmek ve keşfetmek isterseniz, Apidog'u ücretsiz olarak indirdiğinizden emin olun. Apidog, HTTP yanıtlarını keşfetmenize, yanıtları doğrulamanıza ve arka ucunuzu bir profesyonel gibi optimize etmenize yardımcı olan güçlü bir API test ve dokümantasyon aracıdır. Hepsinden iyisi, indirmesi ücretsizdir. API'lerinizi bugün optimize etmeye başlayın.
Şimdi, HTTP durum kodu 304 Not Modified'a derinlemesine dalalım ve neden bu kadar önemli olduğunu görelim.
Sorun: Veri Aktarımında İsraf
Web'in ilk günlerinde, her istek aynı şekilde çalışıyordu:
- Tarayıcı: "Bana
/logo.png
ver." - Sunucu: "İşte burada!" (
200 OK
+ tam resim verisi) - Tarayıcı (2 saniye sonra): "Bana tekrar
/logo.png
ver." - Sunucu: "İşte tekrar burada!" (
200 OK
+ tamamen aynı resim verisi)
Bu inanılmaz derecede israftı. Aynı logo, stil sayfası ve betikler, tek bir kullanıcı için günde düzinelerce kez ağ üzerinden aktarılıyor, bant genişliğini tüketiyor ve sayfa yüklemelerini yavaşlatıyordu.
Bu verimsizliğin çözümü iki aşamalı bir süreçtir: önbelleğe alma ve koşullu istekler, başrolde 304
durum kodu vardır.
HTTP 304 Not Modified Gerçekten Ne Anlama Geliyor?
304 Not Modified
durum kodu, sunucunun istenen kaynağı aktarmasına gerek olmadığını belirten, yönlendirme benzeri bir yanıttır çünkü istemci zaten yerel önbelleğinde güncel bir sürüme sahiptir.
Boş bir gövdeye sahip bir başarı mesajıdır. Sunucu aslında "İsteğiniz başarılı oldu. İstediğiniz kaynak değişmedi. Size gönderecek yeni bir şeyim yok." demektedir.
Başka bir deyişle, aynı veriyi tekrar tekrar göndererek bant genişliğini israf etmek yerine, sunucu basitçe hafif bir onay ile yanıt verir.
Tipik bir 304
yanıtı şaşırtıcı derecede minimalisttir:
HTTP/1.1 304 Not ModifiedCache-Control: public, max-age=300ETag: "a3c8d7e1f5g2"Date: Sat, 28 Oct 2023 10:00:00 GMT
Neyin eksik olduğuna dikkat ettiniz mi? Yanıt gövdesi. Resim verisi, CSS, JSON yok. 304
'ü bu kadar verimli yapan da budur. Yanıtın tamamı sadece birkaç yüz baytlık başlıklardan oluşur ve gövdede olabilecek megabaytlarca veriden tasarruf sağlar.
304 Neden Var? (Kısa Bir Tarihçe)
Web'in ilk günlerinde, bir web sayfası her yüklendiğinde, tarayıcı her şeyi (HTML, CSS, resimler, betikler) sıfırdan getiriyordu. Bu yavaştı ve israftı.
Bunu çözmek için, HTTP, Last-Modified
ve ETag
gibi önbelleğe alma mekanizmalarını tanıttı. 304 durum kodu şunlar için tasarlandı:
- Bant genişliğinden tasarruf etmek.
- Sunucu yükünü azaltmak.
- Yanıt sürelerini hızlandırmak.
HTTP/1.1'de bir standart haline geldi ve günümüzde web performansının temel taşı olmaya devam ediyor.
304 Not Modified Neden Önemli?
Şöyle düşünün: Bir kullanıcı bir web sitesini her ziyaret ettiğinde veya bir API kaynağı istediğinde, tüm içeriği her seferinde indirmek, özellikle mobil kullanıcılar veya yavaş bağlantılar için yavaş ve israflı olabilir. 304 Not Modified'ı kullanarak:
- Gereksiz veri aktarımını azaltır, böylece kullanıcılar sayfaları daha hızlı yükler ve sağlayıcılar bant genişliğinden tasarruf eder.
- Sunucunun tam yanıtları tekrar tekrar göndermesi gerekmediği için sunucu yükünü azaltır.
- Daha hızlı yükleme süreleri ve daha akıcı gezinme ile kullanıcı deneyimini iyileştirir.
- Tekrarlanan istekleri verimli bir şekilde ele alarak ölçeklenebilirliği destekler.
304 olmasaydı, önbelleğe alma etkisiz olur ve web siteleri daha yavaş çalışırdı.
İki Adımlı Dans: Önbelleğe Alma ve 304 Nasıl Birlikte Çalışır?
304
tek başına çalışmaz. İstemci ve sunucu arasındaki zarif bir dansın parçasıdır.
Adım 1: İlk İstek ("Tohum" İstek)
Bir tarayıcı bir kaynağı ilk kez istediğinde, sunucu verilerle birlikte iki önemli bilgiyle yanıt verir (200 OK
):
ETag
(Varlık Etiketi): Kaynağın mevcut sürümü için bir parmak izi gibi benzersiz bir tanımlayıcı. Bu genellikle dosyanın içeriğinin bir hash'idir. Dosya değişirse, ETag de değişir.
ETag: "a3c8d7e1f5g2"
Last-Modified
: Kaynağın en son değiştirildiği tarih ve saat.
Last-Modified: Sat, 28 Oct 2023 09:00:00 GMT
Tarayıcı kaynağı ve bu iki doğrulayıcıyı önbelleğinde saklar.
Adım 2: Sonraki İstek ("Koşullu" İstek)
Tarayıcı aynı kaynağa tekrar ihtiyaç duyduğunda (örneğin, kullanıcı aynı sitede başka bir sayfayı ziyaret ettiğinde), körü körüne istemez. Kaydettiği doğrulayıcıları dahil ederek koşullu bir istek yapar.
Bunu iki şekilde yapabilir:
If-None-Match
Başlığını Kullanarak (ETag ile):
GET /logo.png HTTP/1.1Host: www.example.comIf-None-Match: "a3c8d7e1f5g2"
Bu istek şöyle der: "Lütfen bana /logo.png
'yi yalnızca mevcut ETag'i bende olanla (a3c8d7e1f5g2
) farklıysa gönder."
If-Modified-Since
Başlığını Kullanarak (tarih ile):
GET /logo.png HTTP/1.1Host: www.example.comIf-Modified-Since: Sat, 28 Oct 2023 09:00:00 GMT
Bu istek şöyle der: "Lütfen bana /logo.png
'yi yalnızca 28 Ekim'den beri değiştirilmişse gönder."
Adım 3: Sunucunun Kararı
Sunucu bu koşullu isteği alır ve kaynağı kontrol eder.
- DURUM A: Kaynak DEĞİŞMEDİ. Sunucu, mevcut ETag'in hala
"a3c8d7e1f5g2"
ile eşleştiğini görür.304 Not Modified
ile yanıt verir ve kaynak verisini göndermez. - DURUM B: Kaynak DEĞİŞTİ. Sunucu, ETag'in artık eşleşmediğini görür.
200 OK
, tam kaynak verisi ve tarayıcının önbelleğe alması için yeniETag
veLast-Modified
başlıkları ile yanıt verir.
Bu zarif el sıkışma, verilerin yalnızca kesinlikle gerektiğinde aktarılmasını sağlar.
304 Yanıtlarında HTTP Başlıklarının Rolü
304'ün büyüsü başlıklarda yatar. İki ana oyuncu şunlardır:
- Last-Modified → istemcilere kaynağın en son ne zaman güncellendiğini söyler.
- ETag (Varlık Etiketi) → kaynağın sürümü için benzersiz bir tanımlayıcı.
İstemci If-Modified-Since
veya If-None-Match
gönderdiğinde, sunucu şunları kontrol eder:
- Değişmediyse → 304 döndürür.
- Değiştiyse → yeni kaynakla birlikte 200 OK döndürür.
ETag ve Last-Modified Nedir?
- ETag (Varlık Etiketi): Bir kaynağın sürümünü temsil eden benzersiz bir tanımlayıcı (genellikle bir hash).
- Last-Modified: Kaynağın en son değiştirildiği zamanı gösteren zaman damgası.
İstemciler, içeriğin değişip değişmediğini kontrol etmek için tekrarlanan istekler sırasında bu değerleri koşullu başlıklar olarak gönderir.
304 Yanıtları İçin Yaygın Kullanım Durumları
- Statik varlıklara sahip web siteleri (CSS, JS, resimler).
- Büyük JSON sonuçları döndüren REST API'leri.
- Sunucu senkronizasyonuna dayanan Mobil uygulamalar.
- İçerik dağıtımını optimize eden CDN'ler.
- Arama motoru tarama optimizasyonu.
304 İş Akışı Örneği
İşte bir tarayıcı ve sunucu arasındaki basitleştirilmiş bir örnek:
İlk İstek
textGET /styles.css HTTP/1.1 Host: example.com
İlk Yanıt
`textHTTP/1.1 200 OK ETag: "abc123" Last-Modified: Tue, 15 Sep 2025 11:00:00 GMT Content-Type: text/css
/* CSS stilleri burada */`
Sonraki İstek
textGET /styles.css HTTP/1.1 Host: example.com If-None-Match: "abc123" If-Modified-Since: Tue, 15 Sep 2025 11:00:00 GMT
Sunucu Yanıtı (Değişiklik Yok)
textHTTP/1.1 304 Not Modified
Sunucu içeriğin değişmediğini söylediği için tarayıcı önbelleğe alınmış kopyasını kullanır.
Neden Her Zaman Önbelleğe Alınmış İçerik Sunmayalım?
İyi bir soru!
İstemciler her zaman doğrulama yapmadan önbelleğe alınmış içeriği kullansaydı, güncellemeleri veya doğruluk için gerekli değişiklikleri kaçırabilirlerdi. 304 mekanizması, istemcilerin gerektiğinde güncellenmiş kaynakları almasını sağlarken, hiçbir şey değişmediyse israflı aktarımları önler.
SEO ve 304 Not Modified
SEO açısından, 304 yanıtları arama motorlarının sitenizi daha verimli taramasına yardımcı olur. Bant genişliği kullanımını azaltır ve değişmemiş sayfalar için "içerik yok" yanıtları sunarak tarama bütçelerini iyileştirir, böylece arama motorlarının yeni içeriğe odaklanmasını sağlar.
304 Neden Bu Kadar Önemli? Faydaları
- Şimşek Hızında Yükleme Süreleri: Tarayıcı, her bir varlığı tekrar indirmeyi beklemeden bir sayfayı gösterebilir. Hızlı bir
304
kontrolünden hemen sonra önbelleğe alınmış sürümlerini kullanabilir. - Büyük Bant Genişliği Tasarrufu: Bu en büyük faydadır. Büyük bir gövdeye sahip
200
yerine304
yanıtı sunmak, hem kullanıcı hem de sunucu için muazzam miktarda ağ trafiğinden tasarruf sağlar. - Azaltılmış Sunucu Yükü: Sunucular, aynı dosyayı diskten saniyede binlerce kez okuyup göndermek zorunda kalmayarak CPU döngülerinden ve G/Ç işlemlerinden tasarruf eder.
- Daha İyi Kullanıcı Deneyimi: Daha hızlı web siteleri, daha mutlu kullanıcılar demektir.
- Maliyet Azaltma: Bant genişliği için ödeme yapan şirketler (bulut barındırma faturaları gibi) için, veri aktarımını azaltmak doğrudan para tasarrufu sağlar.
304 Not Modified ile İlgili Yaygın Sorunlar
- Yanlış veya eksik ETag/Last-Modified: İstemcilerin güncellemeleri kaçırmasına veya gereksiz yere tekrar indirmesine yol açar.
- Statik dosyaların doğru şekilde sürüm oluşturulmaması: Önbellek doğrulamasını engeller.
- Proxy'ler veya CDN'lerin koşullu başlıkları yanlış işlemesi: Önbellek tutarsızlığına neden olabilir.
- Sunucu yanlış yapılandırması: 304 uygunken 200 OK döndürme veya tam tersi.
Apidog ile Koşullu İstekleri Test Etme

Önbelleğe alma davranışını test etmek zor olabilir. Belirli başlıklarla istek göndermeniz ve sunucunun yanıtını yorumlamanız gerekir. Apidog bunun için mükemmel bir araçtır.
Apidog ile şunları yapabilirsiniz:
- Doğrulayıcıları Yakalayın: Bir kaynağa ilk isteği gönderin ve Apidog'un arayüzünü kullanarak
200
yanıtındanETag
veLast-Modified
başlıklarını kolayca görüntüleyin ve kopyalayın. - Koşullu İstekler Oluşturun: Aynı URL'ye yeni bir istek oluşturun ve yakaladığınız değerlerle
If-None-Match
veyaIf-Modified-Since
başlıklarını kolayca ekleyin. - 304 Yanıtını Doğrulayın: Koşullu isteği gönderin ve sunucunun gövdesiz bir
304 Not Modified
durumu döndürdüğünü onaylayın. - Önbellek Geçersiz Kılmayı Test Edin: Kaynağı sunucuda değiştirin (erişiminiz varsa) ve koşullu isteği tekrarlayın. Şimdi yeni verilerle birlikte bir
200 OK
görmelisiniz, bu da önbelleğe alma mantığınızın çalıştığını kanıtlar. - Testleri Otomatikleştirin: Bu süreci otomatikleştiren Apidog'da test paketleri oluşturun, API'nizin önbelleğe alma başlıklarının her zaman doğru şekilde yapılandırıldığından emin olun.
Apidog ile gerçek dünya uç durumlarını beklemeden önbelleğe almayı ince ayar yapabilirsiniz. Bu yeteneklerden yararlanmak için Apidog'u ücretsiz indirin.
Geliştiriciler İçin En İyi Uygulamalar
Sunucu tarafı bir uygulama geliştiriyorsanız, 304
'ü kullanabilirsiniz:
- Her Zaman Doğrulayıcı Gönderin: Önbelleğe alınabilir kaynaklar (resimler, CSS, JS, statik API verileri) için,
200
yanıtlarınızda her zaman birETag
veyaLast-Modified
başlığı ekleyin. - Koşullu Mantık Uygulayın: Sunucu kodunuzda,
If-None-Match
veIf-Modified-Since
başlıklarını kontrol edin. Eğer mevcut kaynakla eşleşiyorlarsa,304
ile yanıt verin. Eşleşmiyorlarsa,200
ve yeni verilerle yanıt verin. Cache-Control
Kullanın:Cache-Control
başlığı (örneğin,max-age=3600
), tarayıcıya bir kaynağı koşullu bir istek yapmaya bile gerek kalmadan ne kadar süre taze kabul edebileceğini söyler. Bu,304
'ten bile daha verimlidir.
304 Not Modified ve RESTful API'ler
REST API'lerinde, 304, istemcilerin kaynak temsillerini önbelleğe almasına izin vererek verimliliği büyük ölçüde artırır. Doğru önbellek yönetimi, sunucu yükünü azaltır ve istemci senkronizasyonunu hızlandırır.
Sık güncellenen kaynakları sunan API'lerde, 304 yanıtlı koşullu istekler, ölçeklenebilir performans için esastır.
Web Tarayıcılarında 304 Not Modified
Modern tarayıcılar 304'e büyük ölçüde güvenir:
- Chrome, Firefox, Safari hepsi
ETag
veLast-Modified
'a dayalı önbelleğe almayı uygular. - Bir yenileme (F5) hala 304 kontrollerini tetikleyebilir.
- Bir sert yenileme (Ctrl + Shift + R) önbelleği atlar ve 200'ü zorlar.
304 ve 200: Fark Nedir?
Her iki kod da "başarı" anlamına gelir, ancak fark yükte yatar:
- 200 OK → Tam kaynak döndürülür.
- 304 Not Modified → Kaynak döndürülmez, önbelleği kullan.
304'ü şöyle düşünebilirsiniz:
"Merak etme, yeni bir şey yok. Zaten sahip olduklarını kullanmaya devam et."
304 ve 200 OK: Ne Zaman Hangisini Seçmeli?
- İlk isteklerde veya içerik değiştiğinde her zaman tam içerikle birlikte 200 OK sunun.
- İçerik değişmediğinde yalnızca 304 Not Modified sunun.
Doğru önbellek kontrolü, istemcilerin ne zaman güncelleme isteyeceklerini ve ne zaman önbelleğe alınmış verileri kullanacaklarını bilmelerini sağlar.
Sonuç: Web'in Sessiz İş Gücü
HTTP 304 Not Modified
durum kodu, verimli tasarımın bir başyapıtıdır. Modern web'i ölçeklenebilir ve hızlı kılan sessiz, sahne arkası bir iş gücüdür. İstemcilerin ve sunucuların gereksiz işleri önlemek için birlikte çalıştığı işbirliğine dayalı bir protokolün gücünü gösterir.
304 Not Modified durum kodu, 404 veya 500 gibi manşetlere çıkmayabilir, ancak performans, önbelleğe alma ve verimlilik için esastır. Bant genişliği kullanımını azaltır, sayfa yüklemelerini hızlandırır ve API'lerin sorunsuz çalışmasını sağlar.
Kullanıcılar onu asla görmese de, daha hızlı yüklenen sayfalar ve daha akıcı gezinme sayesinde faydalarını her gün deneyimlerler. Geliştiriciler için, 304
yanıtları için desteği anlamak ve doğru bir şekilde uygulamak, herhangi bir web özelliğinin optimizasyonunda önemli bir beceridir.
Bu yüzden bir dahaki sefere bir sayfa göz açıp kapayıncaya kadar yüklendiğinde, bunu mümkün kılan minik 304
yanıtını hatırlayın. Eğer bir geliştiriciyseniz, 304'te ustalaşmak, daha hızlı, daha akıllı uygulamalar oluşturmak demektir. 304 yanıtlarını nasıl uygulayacağınızı ve test edeceğinizi anlamak, verimli, performanslı web uygulamaları ve API'ler oluşturma yeteneğinizi artırır.
Ve unutmayın, önbelleğe alma ve yönlendirme davranışını test etmek, 304 Not Modified gibi HTTP durum kodlarında ustalaşmanıza yardımcı olmak için tasarlanmış ücretsiz, güçlü bir araç olan Apidog ile her zamankinden daha kolaydır, varsayımlarınıza güvenmeyin, önbelleğe almayı Apidog ile simüle edin ve doğrulayın.