Bu yanıt neden önbellekte saklanıyor?


32

Sitesinin index.html'si şu anda bu başlıklarla geri gelen bir müşterim var:

Kabul Aralıkları: bayt
Bağlantı: canlı tutmak
İçerik Kodlaması: gzip
İçerik Uzunluğu: 3658
İçerik Türü: metin / html
Tarih: Per, 10 Eki 2013 07:36:27 GMT
ETag: "4aa95e1-2ed2-4e721324728b7"
Hayatta Kal: timeout = 5, maksimum = 100
Son Değiştirme: Sal, 24 Eyl 2013 13:34:30 GMT
Sunucu: Apache / 2.2.22
Değişen: Kabul Kodlama, Kullanıcı Aracısı

Açıkçası onlar eklemenizi tavsiye edeceğim Expiresya Cache-Controluygun olarak, ama kafam karıştı: Krom önbellekteyse (bir istek göndermiyor Bu kaynağa ve kullanımlarını önbelleğe hiç mesela (), hatta birkaç saat sonra, bir kopyasını yeniden dün sabah 1: 30'da sabah 8: 30'da önbelleğe alındı. Ben isteği gösterir ve sahip Chrome konsolunun Ağ sekmesi, oldukça net bir şekilde görebiliyorsunuz 200 (OK)gri olarak Durum sütununda ve (from cache)içinde Boyut sütununda. (Chrome'un önbelleğe alma varsayılanlarını değiştirmedim.)

Spesifikasyonun , kullanıcı temsilcilerinin başlıklardan yönlendirme olmadan kendi kararlarını vermelerine izin verdiğinin farkındayım . Burada olan bu mu? Chrome birkaç gün önce en son değiştirildiğini ve güncel olmayan bir güne kadar (yani) bir sürüm kullanmaktan çekinmediğini düşünüyor mu? Yoksa kaçırdığım bir şey mi var?

Yanıtlar:


33

Ne zaman "sona eriyor" ve "Cache-Control" başlıkları belirtilmeyen, ancak bir başlık "Last-Modified" olduğu tarayıcılar onlar önbellekte belgeyi tutmalı ne kadar süre tahmin zorunda belirtilmiş. Bazı tarayıcılar yapmak sayfasını izin kullanımı algoritmaları bir gün veya daha uzun süre önbellekte kalır.

Google’ın en iyi uygulamaları önbelleğe alma durumları:

Son Değiştirme Tarihi, tarayıcının öğeyi önbellekten alıp almayacağını belirlemek için bir sezgisel tarama uyguladığı bir "zayıf" önbellek başlığıdır. (Sezgisel tarama farklı tarayıcılar arasında farklıdır.)


Mozilla (Firefox) bu duruma yönelik algoritmalarını belirten bir HTTP Önbelleğe Alma SSS'sine sahiptir (ancak belgenin 2002'den bu yana algoritması değişmiş olabilir):

... "Son Değiştirme Tarihi" başlığını arıyoruz. Bu başlık mevcutsa, önbelleğin tazelik ömrü, "Tarih" başlığının değerine ek olarak "Son değiştirilen" başlığın değerinin 10'a bölünmesiyle eşittir.

Böylece, değiştirilen ve şimdi arasındaki farkın 15 gün olduğu durumda, Firefox kaynağı 1,5 gün boyunca önbelleğe alır.

Tüm büyük tarayıcıların Firefox’un uyguladığı aynı% 10 kuralı kullandığı anlaşılıyor. StackOveflow hakkında bu sezgiselliği isteyen bir soru soruldu . Farklı tarayıcılar için farklı cevaplar, hepsinin benzer uygulamalara sahip olduğunu göstermektedir. Internet Explorer ve Webkit (Chrome ve Safari) için cevaplar vardır.


Tarayıcı önbelleğinin boyutu muhtemelen önbellek algoritmasının bir günden daha uzun süre saklanabileceğini belirlediği bir dosya için sınırlayıcı bir faktör olacaktır. Tarayıcıların genellikle önbellek için kullandıkları disk alanı için bir ayarı vardır. Çoğu kullanıcı, tarayıcılarını kapattıklarında önbelleklerini de temizler. Bu nedenle, böyle bir dosyanın önbelleğe alındığı süre genellikle aşağıdakilere bağlıdır:

  • Tarayıcının ayırdığı önbellek alanı miktarı
  • Bir kullanıcının ziyaret ettiği web sitelerinin sayısı (ve bu sitelerin boyutu)
  • Kullanıcının tarayıcısını kapatıp kapatmadığı

Lütfen "o zaman Firefox kaynağı 1,5 günlüğüne önbelleğe alır" açıklayabilir misiniz? Hangi tarihten itibaren 1,5 güne kadar önbelleklenecek? Zaten 15 gün olsaydı, çoktan süresi dolmuş olurdu, değil mi? Ve ŞİMDİ eksi son değişiklik sonsuza dek artacağı için, demek istediğim, sonsuza dek önbelleğe alınacak!
myDoggyWritesCode

1
Sonsuza kadar değil. Son değiştirilen başlık ile indirme süresi arasındaki sürenin 1 / 10'u için. 15 gün geçmişse, bu, dosyanın son değiştirilmesinden bu yana 150 gün geçtiği anlamına gelir.
Stephen Ostermiller
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.