Evet, 304 yanıtı yeni bir max-age
(veya ETag veya bu konuyla ilgili diğer yanıt başlıkları) içerebilir.
Orijinal max-age'in veya yeni birisinin onurlandırıldığını test etmek için Firefox 4'ü kullanarak bir deneme yaptım ve yanıt, yeni max-age
'un onurlandırılmasıydı, bu yüzden ne yapmak istediğinizi uygulayabilmeniz gerekiyordu.
O max-age
Date
tepki başlığına göreli olduğunu hatırlamak önemlidir, değil Last-Modified
, bu nedenle sunucu 24 saatlik bir max-age
direktif, bu söylediğini ayarlar her "24 saat Şu andan itibaren." Yani, istediğinizi varsayın, max-age
'unuzu değiştirmek zorunda kalmayacaksınız, her zaman 86400'ü dönmeniz gerekmeyecek.
Her halükarda, denemem için bir genel bakış ve döküm. Temel olarak, bir ETag ayarlayan ve max-age
ila 120 saniye olarak ayarlanan bir test URL'sine girdim. Buna göre, sunucu bu yanıtı başlıklarıyla sayfasını döndürdü:
HTTP/1.1 200 OK
Date: Tue, 14 Jun 2011 23:48:51 GMT
Cache-Control: max-age=120
Etag: "901ea3d0ac9303ae4855a09676f96701"
Last-Modified: Mon, 13 Jun 2011 22:20:03 GMT
Sonra sayfayı yüklemek (ama sert bir yeniden kuvvet değil) için adres çubuğunda "Enter" tuşuna tekrarladı. Firefox, sayfayı önbellekten tekrar tekrar yüklediğinden ağ trafiği yoktu. Sonra, 120 saniye geçtikten sonra, bir dahaki sefere girdiğimde, Firefox bunun yerine beklediğiniz gibi sunucuya bir şartlı GET gönderdi. sunucudan istek ve yanıt vardı: 304 yanıt olarak, ben 240 120 saniye sunucu değişikliği
max-age
yaşadığınız
GET /example HTTP/1.1
If-Modified-Since: Mon, 13 Jun 2011 22:20:03 GMT
If-None-Match: "901ea3d0ac9303ae4855a09676f96701"
HTTP/1.1 304 Not Modified
Date: Tue, 14 Jun 2011 23:50:54 GMT
Etag: "901ea3d0ac9303ae4855a09676f96701"
Cache-Control: max-age=240
Not.
Yani, büyük soru, 120 saniye sonra ne olur? Firefox yeni max-age
'a saygı duyar ve sayfayı önbellekten yüklemeye devam eder mi, yoksa sunucuya mı saldırırdı? Başka bir 240 saniyelik döngüsü boyunca tekrarlanan ve işler beklediğiniz gibi çalıştı
GET /example HTTP/1.1
If-Modified-Since: Mon, 13 Jun 2011 22:20:03 GMT
If-None-Match: "901ea3d0ac9303ae4855a09676f96701"
HTTP/1.1 304 Not Modified
Date: Tue, 14 Jun 2011 23:54:56 GMT
Etag: "901ea3d0ac9303ae4855a09676f96701"
Cache-Control: max-age=240
: cevabım önbellekten sayfa yüklenirken devam etti ve 240 saniye ulaşılmıştır sonrasına kadar-isteğini yeniden vermedi olmasıdır. Yani, umarım bu soruya cevap verir.
RFC, yaş hesaplamalarının nasıl gerçekleştirileceğini ve diğer Önbellek Denetimi parametrelerinin nasıl çalıştığını açıklar. Her tarayıcı ve proxy'nin kuralları izleyeceğine dair bir garanti yoktur, ancak bu noktada HTTP 1.1 oldukça eskidir ve çoğunun Firefox'un yaptığı gibi yapmasını beklersiniz.
(Not: Bu örnekte Sadelik sağlamak için, böyle konak, bağlantı/canlı tutma, içerik kodlama/uzunluk/tipi, kullanıcı aracısı vb gibi alakasız başlıkları sildiğiniz döker)
"Ben daha sonra sayfayı yüklemek için adres çubuğuna "gir" isabetini tekrarlayın (ancak zor bir yeniden yükleme zorlamayın). - Bu, deneyi kendim yapmak için ihtiyacım olan önemli bilgi parçasıydı! İyi araştırılmış cevap için teşekkürler! – roufamatic
FireFox ile anlattığınız şeyi yeniden keşfettim. Chrome ile, konum çubuğuna "gir" kelimesine basmak yine de 304'e neden oldu. Başka bir sayfaya gittim (ör. Google.com) ve ardından geri düğmesine basmak, önbellek davranışını istenen şekilde gösterecektir. (İlginçtir, eğer sayfama "ileri" tuşuyla ulaşırsam, ALWAYS önbelleklenmiş dosyayı görüntüledi.) – roufamatic
Teşekkürler, bu Chrome hakkında iyi bir bilgi. Eğer test ediyorsanız yapmanız gereken en önemli şey, kullanıcılarınız ne yaparsanız simüle etmeye çalışmaktır. Eğer linkleri tıklamak, linkleri tıklamak (direkt trafik), referans verilere göre tahmin edebileceğiniz bir şeydir. her ikisi de geçerli önbellekten yüklenir). Ve tarayıcı tarafından yıkmak. Ya da sadece Firefox/Chrome'a güvenin ve HTTP'yi istediğiniz gibi doğru bir şekilde uyguladığınız için mutlu olun. – joelhardi