Benim PHP komut önbellek (kamu) dostu var mı?

3 Cevap php

Ben birçok belge hizmet verebilir küçük bir PHP uygulama tamamlamışlardır. Bu belgeler must istemcileri and vekiller tarafından önbelleklenebilir.

$ _POST Değer / $ _GET değeri: vekiller benim sonuçları önbelleğe beri hizmet belgeleri bu sırayla dayanır ve farklı dillerde (($ _SERVER ['HTTP_ACCEPT'] dayalı içerik müzakeresini) farklı Mimes türleri olabilir çünkü ben ekstra dikkatli olmak gerekir / URL / PHP oturum değeri / $ _COOKIE değer / $ _SERVER ['HTTP_ACCEPT_LANGUAGE'] / varsayılan komut değer).

(: Aşağıdaki düzenleme bakınız değişti soru) kısaca özetlemek için, bir sayfa birçok MIME türü same URL ile and birçok dil ile servis edilebilir.

Ben kullanmak vekiller üzerinde önbellek yardımcı olmak için "Vary: Accept" ETag başlığı ile başlık in combination. ETAG'ları güncel dili ve son değiştirilme damgası bir MD5.

Her I:

  • Expires başlığını gönder
  • Cache-Control başlığı gönder
  • Bir Last-Modified başlığını gönder
  • Content-Type üstbilgisi gönder
  • (Güncel dili ve Son-Modifiye damgası dayanan) bir ETag başlık gönder
  • Content-Language gönder
  • Belge XHTML ise: başlığını "Kabul Vary" gönder

Şimdi sorumu: Bu vekiller and istemcilerin önbellek yardımcı olmak için yeterli mi? Ben bir şey / başlığı kaçırdım mı?

Size yardımcı olmak için, burada (benim yerel çevre üzerinde) bir test sayfası için HTTP yanıt başlığı bulunuyor:

"
Date             Wed, 30 Dec 2009 18:56:26 GMT
Server           Apache/2.0.63 (Win32) PHP/5.1.0
X-Powered-By     PHP/5.1.0
Set-Cookie       Tests=697daqbmple2e1daq2dg74ur96; path=/
Expires          Wed, 30 Dec 2009 21:56:26 GMT
Cache-Control    public, max-age=10800
Last-Modified    Mon, 28 Dec 2009 15:11:49 GMT
Etag             "44fa50be4638161a596e4b75d6ab7a94"
Vary             Accept
Content-Language en-us
Content-Length   3043
Keep-Alive       timeout=15, max=100
Connection       Keep-Alive
Content-Type     application/xhtml+xml; charset=UTF-8
"

EDIT: Tamam ben bu durumda and (o kadar çok kaynaktan gelebilir - yukarıya bakınız), farklı dilleri olan birçok Mimes bir belge ile hizmet anlıyoruz sadece düz kötü tasarım edilir. Eğer yapmak istiyorsanız bu sadece "özel" önbellek (vekiller hiçbir önbellek) kullanmak ... Ben düzetin muyum?

Her dil, kendi URL varsa (ancak her URL birçok MIME ile servis edilebilir hala) benim geçerli uygulama bir "kamu" cache (istemciler + vekiller önbellek) OK mi?

3 Cevap

Çıktı da bu nedenle çok bir vekil, oturum veri gibi bilemez bir (non-önbelleklenemez) göndermek için kolay olmayacaktır (parametreleri ile) belirli bir URL için sabit olacak gerçek içeriği, yönlendirme şeye bağlıdır ve yana önbellek daha kolay. Ben bu ekstra bir gidiş-dönüş içerir biliyorum, ama muhtemelen daha az hata eğilimli ve aynı zamanda tamamen tüm başlık kombinasyonlarını destekler / anlamıyorum vekiller daha az sorunlara neden olur.

Ayrıca, ben aynı vekil aracılığıyla ancak farklı dil kurabiye ile gidiş iki müşteri varsa, geçerli bir yöntem vekil kopyasını güncellemek gördüğü her zaman kılacak, aynı URL için iki farklı ETAG'ları dönecekti, tahmin ediyorum diğer istemci.

Ben prensip ince olması gerektiğine inanıyoruz - Vary başlığı önbelleğe ETag'a anahtarlı veri birden çok örneğini tutmak gerektiği anlamına gelir ekledi.

Ben size sadece yapmanız Accept değişir ki, sen de Cookie değişir ve Accept-Language olsa da, dikkat cekti. Cookie ile değişen vekil her isteği doğrulamak zorunda olacağı anlamına gelir, ancak sunucu ETag kullanılması gerektiğini (zaten önbelleğe) belirtmek izin bir If-None-Match başlığını kullanmak gerekir.

Yanıtı "Kabul" ve "Accept-Language" de değişmektedir, daha sonra hem "Vary" yanıtı başlığında belirtilen gerekiyor.