Scraping’de Önbellek: Çektiğiniz Sayfa Kaç Saniye Eski? Age, Cache-Control ve Vary
Scraping’de önbellek tazeliği, çektiğiniz sayfanın kaynak sunucudan mı yoksa aradaki bir önbellekten mi geldiğini ve geldiyse kaç saniye önce üretildiğini bilmektir. Cevap yanıt başlıklarındadır: Age başlığı yanıtın bir önbellekte geçirdiği süreyi saniye olarak verir, Cache-Control ise o kopyanın ne kadar süre taze sayılacağını söyler. Proxy üzerinden toplanan veride bu okuma iki kat önemlidir, çünkü çıkış ülkesi hangi CDN kenarının yanıt vereceğini, dolayısıyla hangi kopyanın ve hangi yaşın geleceğini belirler. Bu yazı HTTP önbellek standardının (RFC 9111) tanımlarını veri toplayan tarafın diline çevirir: yaş nasıl hesaplanır, Vary neden aynı adres için birden çok kopya üretir, hangi iş kaç saniyelik yaşı kaldırır ve eski veri geldiğinde önbelleği delmeden ne yapılır.
Yayın: 2026-11-14 · Güncelleme: 2026-11-14

Yanıt kimden geldi: kaynak sunucu mu, aradaki önbellek mi?
RFC 9111’e göre Age başlığı, gönderenin yanıtın kaynak sunucuda üretilmesinden ya da başarıyla doğrulanmasından bu yana geçen süre tahminidir ve saniye cinsinden negatif olmayan bir tam sayıdır. Standart iki çıkarım kuralı koyar: Age başlığının varlığı, yanıtın bu istek için kaynak sunucu tarafından üretilmediğini gösterir; Age’in yokluğu ise kaynağa gidildiğini göstermez. Yani Age görüyorsanız önbellekten geldiğinden eminsiniz; görmüyorsanız hiçbir şeyden emin değilsiniz, çünkü bazı önbellekler bu başlığı eklemez.
Yanıt bir zincirden geçer: kaynak sunucu, varsa kaynağın önündeki ters proxy, CDN kenarı ve istemci tarafındaki katmanlar. Age, standarda göre yanıtın bu zincirdeki her önbellekte geçirdiği sürelerin ve ağ yolundaki geçiş süresinin toplamıdır. Veri toplayan taraf için anlamı şudur: Age 240 yazan bir ürün sayfasındaki fiyat en az dört dakika önce kaynak tarafından yazılmıştır; o dört dakikada fiyat değişmiş olabilir ve siz değişimi görmüyorsunuzdur.
Datacenter proxy bu zincirin istemci tarafındadır ve çıkış noktasıdır; sayfayı hangi CDN kenarının vereceğini çıkışın konumu belirler. Yanıtın yaşını yoldaki önbellekler belirler; çıkış noktası buna karışmaz. Çıkış noktasının kendisinin yanıt saklayıp saklamadığını varsaymak yerine aynı adrese iki farklı çıkıştan eşzamanlı istek atıp Age değerlerini karşılaştırın; iki değer bağımsız biçimde değişiyorsa yaşı kenar önbellekler belirliyordur.
Tazelik hesabı: tazelik ömrü ile mevcut yaş
Standart tek bir eşitsizlik kullanır: yanıt tazedir, eğer tazelik ömrü mevcut yaştan büyükse. Tazelik ömrü sırayla şu kurallardan ilk eşleşenle bulunur: paylaşımlı önbellekte s-maxage yönergesi varsa onun değeri; yoksa max-age yönergesi; o da yoksa Expires başlığından Date başlığının çıkarılmasıyla elde edilen süre; hiçbiri yoksa önbellek sezgisel bir ömür atayabilir. CDN paylaşımlı önbellek olduğu için sizin gördüğünüz kopyanın ömrünü çoğunlukla s-maxage belirler; max-age tarayıcı içindir.
Örnek: yanıtta Cache-Control: s-maxage=300, max-age=60 ve Age: 240 var. Kenar bu kopyayı 300 saniye taze sayar, 240 saniyesi geçmiştir; önümüzdeki 60 saniye boyunca aynı adrese gelen istekler kaynağa gitmeden bu kopyayı alır. Sizin tarama turunuz bu kenara saniyede bir istek atsa da 60 saniye boyunca aynı fiyatı görürsünüz. Sonraki istek kaynağa gider ve Age sıfıra yakın döner. Tarama aralığını s-maxage’in altına çekmek yeni veri getirmez, yalnız GB ve istek harcar.
Standart yaşı iki bağımsız yolla hesaplar. Birincisi görünür yaş: yanıtın alındığı an eksi Date başlığı; sonuç negatifse sıfır sayılır ve bu yol saatinizin kaynak sunucuyla makul ölçüde eşit olmasını ister. İkincisi düzeltilmiş Age değeri: Age başlığı artı isteğin yolda geçirdiği süre. Kendi kayıtlarınızda ikisini de tutun: Age yoksa görünür yaş tek ölçünüzdür ve makinenizin saati NTP ile eşitlenmemişse yanlış çıkar. Standart yerel saat diliminin bu hesaba karışmamasını ve GMT dışındaki saat dilimi kısaltmasıyla gelen tarihin geçersiz sayılmasını söyler; Date başlığını daima UTC olarak ayrıştırın.
İki yönerge özel okunur. no-cache, yanıtın kaynağa doğrulatılmadan başka bir isteğe verilemeyeceğini söyler; gördüğünüz yanıt ya kaynaktan gelmiştir ya da az önce doğrulanmıştır, yaşı düşüktür. stale-while-revalidate (RFC 5861) ise tersidir: önbellek kopya bayatladıktan sonra belirtilen saniye kadar bayat kopyayı vermeye devam edebilir ve arka planda yeniler. Bu yönergeyi taşıyan sayfada Age değeri s-maxage’i aşabilir; eski veri aldığınız hâlde yanıt 200’dür ve hata görünmez.
Vary ve proxy çıkışı: aynı adres, kaç kopya?
Vary başlığı, önbelleğe aynı adres için birden çok kopya tutmasını söyler. RFC 9111’e göre Vary taşıyan bir saklı yanıt, yalnız Vary’de sayılan istek başlıkları orijinal istekle eşleşiyorsa doğrulama yapılmadan kullanılabilir; Vary: * değeri hiçbir zaman eşleşmez. Pratikte Vary: Accept-Encoding sıkıştırma türüne göre, Vary: Accept-Language dile göre, Vary: Cookie ya da User-Agent ise neredeyse istemci başına ayrı kopya demektir.
Veri toplayan taraf için sonuç ikidir. Birincisi, tarayıcınızın gönderdiği başlık seti kopyayı seçer: Accept-Language değerini bir çalışmada tr-TR, diğerinde en-US gönderirseniz iki farklı kopya alırsınız ve ikisinin yaşı farklıdır. Başlık setini sabitleyin ve kayıtlara yazın. İkincisi, değişen başlık soğuk kopya üretir: hiç kimsenin istemediği bir başlık kombinasyonuyla gelen istek kenarda bulunmaz, kaynağa gider, kaynak yükü artar. Bu, başkasının sunucusuna sizin gönderdiğiniz gereksiz yüktür.
Proxy çıkışının etkisi Vary’nin dışında, CDN yapılandırmasındadır. Birçok CDN, standart Vary mekanizmasının yanında önbellek anahtarına çıkış ülkesini ya da kenar kimliğini ekler; Almanya çıkışından istenen sayfa Frankfurt kenarının kopyasıdır, Kanada çıkışından istenen sayfa Toronto kenarının. İki kopya farklı anlarda kaynaktan alınmıştır, yaşları ve bazen içerikleri farklıdır. Kendi sitenizin kenarlarını beş ülkeden test etme protokolü çok lokasyonlu site hızı testi rehberinde var; burada ters yönden bakıyoruz: başkasının sitesinden tutarlı seri almak için çıkışı sabitlemek gerekir.
Dört kayıt alanı: Age, Date, Last-Modified ve kenar durumu
Her çekilen sayfa için dört alan kaydedin. Birincisi Age başlığının ham değeri; yoksa boş bırakın, sıfır yazmayın, çünkü yokluk kaynak demek değildir. İkincisi görünür yaş: alındığı an eksi Date, saniye olarak; negatifse sıfır. Üçüncüsü Last-Modified ya da ETag: içeriğin kaynak tarafında en son ne zaman değiştiğinin ya da hangi sürüm olduğunun işareti. Dördüncüsü CDN’in kendi durum başlığı: isabet mi ıskalama mı; başlığın adı sağlayıcıya göre değişir ama isabet-ıskalama ayrımı hemen hepsinde vardır.
Dört alan birlikte okunur. Age yüksek, kenar isabet, Last-Modified eski: kopya bayattır ama içerik de uzun süredir değişmemiştir, veri büyük olasılıkla doğrudur. Age yüksek, Last-Modified yeni: içerik kopyadan sonra değişmiş olabilir, bu satır şüphelidir. Age yok, kenar ıskalama: kaynaktan geldi, yaş sıfır. Age var ama kenar ıskalama: kenar ıskaladı, kaynağın önündeki başka bir önbellek yanıtladı; zincirde ikinci bir katman vardır ve Age onun süresidir.
Raporunuza bir veri yaşı sütunu ekleyin: görünür yaş ile Age’in büyüğü. Fiyat, stok ve sıralama gibi zamana duyarlı alanların yanında bu sütun, “veri yanlış” tartışmasının yarısını kapatır. Fiyat izleme rehberinde anlatılan dört alanlı kayıt bu sütunla beşe çıkar; o rehberde önbellek tek paragraftı, burada ölçüm yöntemi var.
Tolerans kararı: hangi iş kaç saniyelik yaşı kaldırır?
Kabul edilebilir yaş iş tipine göre konur ve tarama aralığıyla birlikte düşünülür. Saatlik fiyat turunda yaşı tur aralığının yarısıyla sınırlamak makuldür: 1.800 saniyeden eski kopya, bir sonraki turda görülecek değişimi şimdiden kaçırmış olabilir. Günlük katalog taramasında birkaç saatlik yaş sorun değildir; sayfa zaten günde bir kez okunur. Stok tükenmesi ya da kampanya başlangıcı gibi dakika hassasiyetli alanlarda ise toleransı kaynağın s-maxage değerine eşitlemek gerekir, çünkü daha tazesini kenardan alamazsınız.
Toleransı aşan satırlar atılmaz, işaretlenir. İki nedenle: birincisi, eski kopya yine de bir veri noktasıdır ve seride boşluk bırakmaktan iyidir; ikincisi, işaretli satırların oranı hedefin önbellek politikasını gösterir. Bir hedefte satırların yüzde 90’ı toleransı aşıyorsa sorun hedefin uzun s-maxage değeridir; aralığı kısaltmak işe yaramaz, aşağıdaki doğru yollardan biri gerekir.
Tolerans tablosunu hedef başına yazın ve her hedefin gözlenen s-maxage ile Age dağılımını yanına koyun. Aynı hedefin farklı sayfa tiplerinde farklı politikası olabilir: liste sayfası uzun önbellekli, ürün sayfası kısa, sepet uç noktası no-store. Bu üç tipi tek toleransla ölçmek ya gereksiz alarm ya da kaçırılmış değişim üretir.
Eski veri gelince: yanlış yol ve dört doğru yol
Yanlış yol önbelleği delmektir: adrese rastgele bir sorgu parametresi ekleyip kenarı ıskalatmak. Bu, her isteği kaynağa gönderir; hedefin önbelleğe almasının nedeni olan yükü hedefe geri yükler, site kurallarıyla çelişebilir ve bazı CDN’ler sorgu dizesini anahtara almadığı için çalışmaz bile. Kendi sitenizi test ederken soğuk istek için bilinçli kullanılan bu yöntem, başkasının sitesinde veri toplama aracı değildir.
Birinci doğru yol koşullu istektir. RFC 9111’e göre doğrulama, Last-Modified değerini If-Modified-Since başlığında ya da ETag değerini If-None-Match başlığında geri göndererek yapılır; içerik değişmediyse 304 döner ve gövde aktarılmaz. GB bazlı rotating üründe bu, değişmeyen sayfanın bedelini birkaç yüz bayta indirir; 1,5 MB’lık bir sayfa için gövde yerine 304 almak, varsayım açık, aktarılan veriyi binde bire yakın düşürür. Yapay zeka veri toplama rehberinde koşullu istek tazelik aracı olarak anlatıldı; burada GB aracı.
İkinci doğru yol, tarama aralığını gözlenen önbellek ömrüne göre kurmaktır: s-maxage 300 olan sayfayı dakikada bir çekmek beş isteğin dördünü aynı kopyaya harcar; aralığı 300 saniyeye çekip her turda yeni kopya almak aynı tazeliği beşte bir istekle verir. Üçüncü doğru yol, no-cache ya da max-age=0 istek yönergesi göndermektir; standart önbelleği bağlamaz ama birçok kenar bu isteği kaynağa iletir. Sonucu Age ile doğrulayın: yönergeye rağmen Age geliyorsa kenar uymuyordur, ısrar etmeyin.
Dördüncü doğru yol çıkışı sabitlemektir. Aynı hedefin aynı sayfasını her turda aynı static IP’den, dolayısıyla aynı kenardan çekmek, seride tek kopya zinciri verir: yaş düzenli artar, kaynak yenilemesinde sıfırlanır, grafik testere dişi gibi okunur. Rotating çıkışla her tur başka kenara düşer; yaşlar birbirinden bağımsızdır ve seri gürültülenir. Tutarlı seri static, çok kenarın kopyalarını kasıtlı karşılaştırmak rotating ister.
Ürün seçimi: tutarlı seri için static, çok kenar için rotating
Static IPv4 datacenter kataloğa göre 100, 250, 500 ve 1.000 adet için 30 günlük dönemde 15, 25, 45 ve 80 USD’dir ve ABD, Birleşik Krallık, Hollanda, Almanya ve Kanada lokasyonlarında sunulur. Fiyat izleme ve stok takibi gibi seri işlerde hedef başına bir ya da birkaç sabit adres ayrılır; aynı adres aynı kenara düştüğü için Age serisi anlamlı kalır ve koşullu isteklerle ETag zinciri kopmaz. Adet bazlı faturada 304 yanıtının GB’ye etkisi yoktur, kazanç istek süresindedir.
Rotating IPv4 datacenter GB bazlıdır: 2, 10, 20, 50 ve 100 GB paketleri 1, 6, 12, 30 ve 60 USD; 180’den fazla lokasyonlu havuzda çıkış ülkesi filtrelenir. Bir sayfanın farklı ülkelerdeki kenar kopyalarını karşılaştırmak, bölgesel fiyat ya da içerik farkını yakalamak bu ürünün işidir. GB faturasında koşullu istek doğrudan paraya çevrilir: değişmeyen sayfalar 304 ile geçtiğinde paketin büyük bölümü yalnız gerçekten değişen sayfalara gider.
İki ürünü birlikte kullanmak yaygındır: izlenen çekirdek liste static adreslerden, keşif ve bölgesel karşılaştırma rotating havuzdan. Çıkışın bulunduğu ülke ile hedefin kenar dağılımı arasındaki gecikme farkı scraper sunucusu konumu rehberinde, bileşenlere ayrılmış ölçüm de proxy gecikme ölçümü rehberinde anlatıldı.
Kontrol listesi
Her kayıtta Age, görünür yaş, Last-Modified ya da ETag ve kenar durumu var. Makine saati NTP ile eşitlendi, Date UTC olarak ayrıştırılıyor. İstek başlık seti sabit ve kayıtlı; Accept-Language ve Accept-Encoding çalışmalar arasında değişmiyor. Hedef başına tolerans yazıldı ve gözlenen s-maxage ile karşılaştırıldı.
Toleransı aşan satırlar işaretleniyor, atılmıyor. Değişmeyen sayfalar için koşullu istek açık ve 304 oranı izleniyor. Tarama aralığı önbellek ömrünün altına inmiyor. Seri işler static adresten, bölgesel karşılaştırma rotating havuzdan. Sorgu parametresiyle önbellek delme yok.
İlgili ürünler
İç bağlantılar
- E-ticaret Fiyat Takibi: Datacenter Proxy Ne Zaman Yeter?
- Çok Lokasyonlu Site Hızı Testi: CDN’i Proxy ile Doğrulama
- Yapay Zeka İçin Web Verisi Toplama: Proxy Nerede Gerekir?
- Scraper Sunucusu Nerede Çalışmalı? Üç Bacakta Gecikme
- Proxy Gecikme Ölçümü: Latency Testi Nasıl Yapılır?
- Yüksek Hacimli Scraping’de Gecikme: Datacenter Proxy Planı
- Pazar Araştırması
- Web Scraping
SSS
Yanıtta Age başlığı yoksa sayfa taze midir?
Hayır. RFC 9111, Age’in yokluğunun kaynağa gidildiği anlamına gelmediğini açıkça yazar; bazı önbellekler bu başlığı eklemez. Age yoksa görünür yaşı, yani alındığı an eksi Date değerini kullanın ve CDN’in isabet-ıskalama başlığına bakın.
Age değerini proxy mi ekliyor?
Age’i yanıtı saklayan önbellek ekler; proxy çıkışı yalnız hangi CDN kenarına düştüğünüzü belirler. Test etmek için aynı adrese iki farklı çıkıştan aynı anda istek atın: Age değerleri bağımsız değişiyorsa yaşı kenar önbellekler belirliyordur.
max-age=0 ile no-store arasındaki fark nedir?
max-age=0 yanıtın hemen bayat sayılmasını ister; kopya saklanabilir ama kullanılmadan önce doğrulanır. no-store yanıtın hiç saklanmamasını ister. Veri toplayan taraf için ikisi de düşük yaş demektir; fark, no-store sayfalarında koşullu isteğin işe yaramamasıdır, çünkü doğrulanacak kopya yoktur.
CDN sorgu parametresini yok sayıyorsa önbelleği nasıl geçerim?
Geçmeyin. Kenarı ıskalatmak hedefin kaynağına yük bindirir ve çoğu zaman kurallarına aykırıdır. Koşullu istek, önbellek ömrüne uyan tarama aralığı ve no-cache istek yönergesi standardın öngördüğü yollardır; bunlar yeni kopya getirmiyorsa hedef o tazeliği sunmuyordur.
Static mi rotating mi daha taze veri getirir?
Tazeliği kenar önbellek belirler; ürün yalnız hangi kenara düştüğünüzü seçer. Static adres aynı kenara düştüğü için yaş serisi düzenli ve okunabilir olur; rotating çıkış her turda başka kenarın kopyasını getirir ve yaşlar bağımsız dağılır. Seri izleme için static, bölgesel kopyaları karşılaştırmak için rotating seçilir.
