Kontrol-cache başlıklarını nasıl kullanılacağı?

4 Cevap php

Ben sitemde bilge performansını nasıl yaptığını görmek için Google Chrome için Google hız izleyici indirilen ve ben gibi benim style.css, resim, gibi bazı dosyalar için önbelleğe etkinleştirmeniz gerekir söyler

Ben aşağıda php kod html içeriği önbelleğe tarayıcıları söylemek gerektiğini okudum. Ben o görüntüleri bir çift ile hızlı bir php sayfa yazdı ve nasıl çalıştığını görmek için test (başlıkları gönderilmeden önce) üstünde aşağıdaki kodu sıkışmış.

Header("Cache-Control: public, max-age=3600, must-revalidate");

Ben Speed ​​Tracer analizine geri giderken diyor ki ...

Summary From Cache: false

Request Headers Pragma: no cache Cache-Control: max-age=0

but under Response Headers... Cache-Control: public, max-age=3600, must-revalidate (exactly what I specified)

Biraz kafam karıştı, neler oluyor ...? Bu önbellekten dediğinde: false bu sunucu önbellek değil müşterinin önbellek demek?

4 Cevap

Anahtar must-revalidate: Bu dosya değişti, istemci sunucu soran anlamına gelmektedir. Bu durumda işlemek istemiyorsanız, tarayıcı yeni bir kopyasını almak olacaktır.

Read Mark Nottingham’s fantastic Caching Tutorial for more information. As an example for a PHP implementation you may use my code.

$_SERVER['HTTP_IF_NONE_MATCH'] içine bakmak ve $_SERVER['HTTP_IF_MODIFIED_SINCE'] istemcileri doğrulamak için. Ve her ikisi başlıkları zararlı kod içerebilir unutmayın. ;)

When it says from cache: false does that mean from the server cache and not the client's cache?

^ Bu istemci önbelleğinde bahsetmektedir.

Bu şekilde önbelleğe alma ayarlama PHP dosyaları kapsayacak, ama eğer bu, .htaccess kullanılarak yapılabilir görüntüleri, CSS, scriptler, vb önbelleğe başka bir şey sunucu tarafı uygulamak gerekir sunucu bunu destekler.

Örneğin, bu ben bir kaç siteler için benim. Htaccess dosyasında kullanıyorum budur.

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)(\.gz)?$">
  Header set Expires "Thu, 15 Apr 2012 20:00:00 GMT"
  Header unset ETag
  FileETag None
</FilesMatch>

Ben herhangi bir tarayıcı önbelleği başlıkları ile getirilen içeriğe sahiptir kadar ancak bunu önbelleğe mümkün olmayacak, bu araç ile aşina değilim. Tarayıcınız now önbelleğinde bir kopyasına sahip olmalıdır - bu sunucu beklenen başlıkları geri gönderiyor ve sayfa tarayıcı tarafından önbelleğe gerektiğini görünür. Eğer aynı sayfayı getiriliyor denerseniz again o önbellek yerine kökenli sunucu (1 saatlik zaman sınırı geçmediğini varsayarak) getirilecek.

Bağlantı yoluyla erişen yerine refresh düğmesine basarak deneyin - Bazı tarayıcılar önbelleği görmezden ve sayfayı yeniden almak için açık bir istek olarak bir yenileme isteği yorumlamak unutmayın.

C.

Bu Cache-Control başlık alanı direktifler aslında ne anlama geldiğini anlamak gerekir:

  • public ,

    Normalde yalnızca sigara paylaşılan önbellek içinde olmayan önbelleklenebilecek veya önbelleklenebilecek olacağını bile tepki, herhangi bir önbellek tarafından önbelleğe olabileceğini gösterir. (Ek bilgi için, Authorization, section 14.8 Ayrıca bakınız.)

  • max-age=3600 yanıt 3600 saniye için yeni olduğu belirtilen:

    Max-age önbellek denetim yönergesi önbelleğe alınmış bir tepki mevcut olduğunda bugünkü yaşı bu kaynak için yeni bir istek anda (saniye) verilen yaş değerden büyükse, tepki bayat. Bir cevaba max-age direktif diğer bazı daha kısıtlayıcı önbellek direktif de mevcut olmadıkça tepki (yani "kamu") önbelleklenebilecek olduğunu ima eder.

  • must-revalidate bu isteği karşılamak için bu önbelleğe alınmış yanıt kullanmadan önce bayat olduktan sonra bir önbellek önbelleğe alınmış yanıt revalidate gerektiğini belirtir:

    Mutlaka REVALIDATE yönergesi bir önbellek tarafından alınan bir tepki mevcut olduğunda ilk origin sunucusu ile revalidating olmadan bir sonraki isteği yanıt bayat olduktan sonra, bu önbellek girdisini kullanmak ZORUNLU. (Yani, önbellek sadece kökeni sunucunun bitiş tarihi veya max-age değerine dayalı, eğer, önbelleğe alınan yanıt bayat, uçtan uca revalidasyon her zaman yapmak gerekir.) [...] Sunucular mutlaka REVALIDATE direktifi yollamalılar ve varlık üzerinde bir istek revalidate için başarısızlık böyle bir sessizce Yürütülmeyen mali işlem olarak yanlış bir işlem, neden olabilir ancak eğer.

Şimdi bu bu direktiflerin amaçlanan anlamı budur.

Ama her zaman olduğu gibi, gerçeklik biraz farklı: Özellikle must-revalidate bayat oldu sonra sadece önbelleğe alınmış yanıt revalidate yorumlanmamalıdır değil ama sonraki her istek üzerine veya revalidated vardır o olmamalıdır Tüm önbelleğe (bu sonraki isteği Cache-Control: max-age=0 gönderir muhtemelen neden).

"Cache Kimden: false" yanıtı bir önbellek gelen ancak doğrudan sunucudan olmadığını göstermek gibi görünüyor.