Bonjour tout le monde,
J'essaie de cacher (cache navigateur via HTTP headers) tous les appelles au controller "Categorie" dans mon application.

la méthode de cache est la suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
protected function _setCachingHeaders(){
 
        if ($this->_request->getHeader('IF-MODIFIED-SINCE')) {
            $this->_response->setHttpResponseCode(304);           
            return;
        }
 
        $hashID     = sha1($this->_response->getBody());
        $headers    = apache_request_headers();
 
        $lastChangeTime = 1347527410; # 13/09/12 09:10:10
        $expireTime     = 7200; # seconds (2 hours)
 
        $this->_response->clearHeaders();
        $this->_response->setHeader('Cache-Control', 'max-age=' . $expireTime, true);
        $this->_response->setHeader('Expires', gmdate('D, d M Y H:i:s', time() + $expireTime) . ' GMT', true);
        $this->_response->setHeader('Pragma', 'public', true);
 
        $this->_response->setHeader('Last-Modified', gmdate('D, d M Y H:i:s', time()) . ' GMT', true);
        $this->_response->setHeader('ETag', $hashID, true); # Etag Helps browsers determine if page has been changed 
 
        # check in different ways if page has changed
        $if_modified_since  = strtotime(preg_replace('/;.*$/','',$_SERVER["HTTP_IF_MODIFIED_SINCE"]));
        $pageWasUpdated     = !(isset($_SERVER["HTTP_IF_MODIFIED_SINCE"]) && strtotime($_SERVER["HTTP_IF_MODIFIED_SINCE"]) == $lastChangeTime);
        $doIDsMatch         = (isset($_SERVER["HTTP_IF_NONE_MATCH"]) && strpos($_SERVER["HTTP_IF_NONE_MATCH"], $hashID) !== false);
 
        if (($if_modified_since >= $lastChangeTime) || !$pageWasUpdated || $doIDsMatch){
            $this->_response->setHttpResponseCode(304);
            $this->_response->setHeader('Connection', 'close');
 
            $front = Zend_Controller_Front::getInstance();
            $front->returnResponse(false);
 
            $this->_response->sendHeaders(); # send headers
        } else {
            $this->_response->setHttpResponseCode(200);
            # Tell the browser which size the content
            $this->_response->setHeader('Content-Length', mb_strlen($this->_response->getBody(), 'latin1'));
        } 
 
    }
En gros, je vérifie si la page a été modifié depuis, j'envoie un 200 si oui, sinon un 304 pour charger depuis le cache.

L'appelle à cette méthode je le fais dans la méthode qui s'occupe du rendering de la page "Categories"

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
echo $this->view->render($tplName);
$this->_setCachingHeaders();
return;
Problème:
Je remarque le navigateur recharge une page caché tres vite, et ne fait meme pas un appelle au serveur pour la recuperer, mais le soucis c'est que cette page une fois chargé, je ne peux plus rien faire dessus, tous les elements sont incliquables (à part le hover, les couleurs de mes items menus changent quand je passe la souris dessus) mais la page ne réagit pas.

Dés idées pour la cause ?

Merci d'avance.