, Bir çok arama buldum her öğreticiler okuma ve burada bazı sorular sorduktan sonra, ben nihayet (en azından bence) corrctly cevaplamak için başardınız hiçbiri-maç-eğer ve değişiklikte-beri HTTP istekleri.
Hızlı bir özetleyelim yapmak için, bu ben önbelleklenebilecek every sayfalarında ne olduğunu:
session_cache_limiter('public'); //Cache on clients and proxies
session_cache_expire(180); //3 hours
header('Content-Type: ' . $documentMimeType . '; charset=' . $charset);
header('ETag: "' . $eTag . '"'); //$eTag is a MD5 of $currentLanguage + $lastModified
if ($isXML)
header('Vary: Accept'); //$documentMimeType can be either application/xhtml+xml or text/html for XHTML (based on $_SERVER['HTTP_ACCEPT'])
header('Last-Modified: ' . $lastModified);
header('Content-Language: ' . $currentLanguage);
Ayrıca, her sayfa (her dil için) o kendi URL var. Örneğin, "index.php" URL İngilizce "/ tr / home" ve Fransızca "/ fr / accueil" altında sunulacaktır.
Benim büyük sorun için "304 Değişmedi" cevap oldu none-maç-eğer ve değişiklikte-beri HTTP istekleri only when needed.
The best doc I've found is: http://rithiur.anthd.com/tutorials/conditionalget.php
Ve bu ben (bu kod parçası önbelleğe alınabilir sayfalarda EE denir) bunun yaptığı uygulamasıdır:
$ifNoneMatch = array_key_exists('HTTP_IF_NONE_MATCH', $_SERVER) ? $_SERVER['HTTP_IF_NONE_MATCH'] : false;
$ifModifiedSince = array_key_exists('HTTP_IF_MODIFIED_SINCE', $_SERVER) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false;
if ($ifNoneMatch !== false && $ifModifiedSince !== false)
{
//Both if-none-match and if-modified-since were received.
//They must match the document values in order to send a HTTP 304 answer.
if ($ifNoneMatch == $eTag && $ifModifiedSince == $lastModified)
{
header('Not Modified', true, 304);
exit();
}
}
else
{
//Only one header received, it it match the document value, send a HTTP 304 answer.
if (($ifNoneMatch !== false && $ifNoneMatch == $eTag) || ($ifModifiedSince !== false && $ifModifiedSince == $lastModified))
{
header('Not Modified', true, 304);
exit();
}
}
Benim soru iki yönlüdür:
- Bunu yapmak için doğru yolu nedir? Ben none-maç-eğer ve değişiklikte-beri gönderilir, both Bir 304 cevap eşleşmesi gerekir zaman demek ve iki biri gönderilecektir yalnızca, sadece bu bir eşleşen bir göndermek için OK 304?
- Burada anlatılan bağlamında kullanıldığında, bu 2 parçacıkları (I vekiller and Web tarayıcıları dost önbelleğe demek) dostu kamu önbellek olmasıdır?
BTW, ben 5.1.0 + sadece PHP kullanabilirsiniz (ben sürümlerini desteklemez düşük o).
Edit: lütuf eklendi ... Ben kaliteli bir cevap bekliyoruz. Eğer bir şey tahmin ediyorsanız / oy cevap vermeyin!