2012-03-09 2 views
5

Возможно ли использовать кеш проверки в ESI с Symfony 2?Edge Side Включает и проверяет кеширование в Symfony 2

Если вы посмотрите HttpFoundation Response класс, вы можете увидеть, как работает isNotModified:

/** 
* Determines if the Response validators (ETag, Last-Modified) match 
* a conditional value specified in the Request. 
* 
* If the Response is not modified, it sets the status code to 304 and 
* removes the actual content by calling the setNotModified() method. 
* 
* @param Request $request A Request instance 
* 
* @return Boolean true if the Response validators match the Request, false otherwise 
* 
* @api 
*/ 
public function isNotModified(Request $request) 
{ 
    $lastModified = $request->headers->get('If-Modified-Since'); 
    $notModified = false; 
    if ($etags = $request->getEtags()) { 
     $notModified = (in_array($this->getEtag(), $etags) || in_array('*', $etags)) && (!$lastModified || $this->headers->get('Last-Modified') == $lastModified); 
    } elseif ($lastModified) { 
     $notModified = $lastModified == $this->headers->get('Last-Modified'); 
    } 

    if ($notModified) { 
     $this->setNotModified(); 
    } 

    return $notModified; 
} 

Проблема заключается в том, что ESI $ request-> headers-> Get ('If-Modified-Since'); и $ request-> getEtags() ничего не возвращают в ESI ... поэтому кеш никогда не бывает свежим!

У вас есть решение для запроса $?

Если проверка HTTP-кеша не может работать в ESI, существует ли другой способ кэширования частичного?

Спасибо!

ответ

1

Я не использовал ESI с Symfony2 (пока), но документация по документации Symfony2 Using Edge Side Includes, по-видимому, предполагает, что это довольно простой процесс.

+0

Да с кешем истечения срока действия это очень просто, и это работает! Но, похоже, он не работает при использовании кеша проверки ... поэтому я попытался отладить его, и это кажется невозможным ... – Sybio