2014-07-11 1 views
0

J'essaie de comprendre comment fonctionne le cache http et les empreintes digitales . J'ai installé mon serveur express à l'actif du cache toujours comme ceci:Utilisation du cache et des empreintes digitales http

router.use('/public', 
     express.static(path.join(__dirname, '..', 'public'), 
     { maxAge: 864000000 })); 

Je m'y attendais à l'actif du cache pour toujours, même si je change le contenu des fichiers, je vais donc besoin d'empreintes digitales les noms de fichiers efface le cache. Toutefois;

C'est sortie en-têtes Google Chrome pour common.js d'actifs statiques après un rechargement

Remote Address:192.168.56.101:3000 
Request URL:http://192.168.56.101:3000/public/assets2/scripts/app/common.js 
Request Method:GET 
Status Code:304 Not Modified 
Request Headers 
GET /public/assets2/scripts/app/common.js HTTP/1.1 
Host: 192.168.56.101:3000 
Connection: keep-alive 
Cache-Control: max-age=0 
Accept: */ * 
If-None-Match: W/"ogrxaeWybJBlXMTTr2leWA==" 
If-Modified-Since: Fri, 11 Jul 2014 13:46:01 GMT 
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 
Referer: http://192.168.56.101:3000/ 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: tr-TR,tr;q=0.8,en-US;q=0.6,en;q=0.4 
Response Headers 
HTTP/1.1 304 Not Modified 
X-Powered-By: Express 
Accept-Ranges: bytes 
Date: Fri, 11 Jul 2014 13:48:34 GMT 
Cache-Control: public, max-age=864000 
Last-Modified: Fri, 11 Jul 2014 13:46:01 GMT 
ETag: W/"ogrxaeWybJBlXMTTr2leWA==" 
Connection: keep-alive 

Nice, je reçois un 304. Maintenant, je change le contenu de common.js et faire un reload à nouveau, cette est la sortie:

Remote Address:192.168.56.101:3000 
Request URL:http://192.168.56.101:3000/public/assets2/scripts/app/common.js 
Request Method:GET 
Status Code:200 OK 
Request Headers 
GET /public/assets2/scripts/app/common.js HTTP/1.1 
Host: 192.168.56.101:3000 
Connection: keep-alive 
Cache-Control: max-age=0 
Accept: */ * 
If-None-Match: W/"ogrxaeWybJBlXMTTr2leWA==" 
If-Modified-Since: Fri, 11 Jul 2014 13:46:01 GMT 
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 
Referer: http://192.168.56.101:3000/ 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: tr-TR,tr;q=0.8,en-US;q=0.6,en;q=0.4 
Response Headers 
HTTP/1.1 200 OK 
X-Powered-By: Express 
Accept-Ranges: bytes 
Date: Fri, 11 Jul 2014 13:50:35 GMT 
Cache-Control: public, max-age=864000 
Last-Modified: Fri, 11 Jul 2014 13:50:33 GMT 
ETag: W/"o65+0J5C8swpsmHMxNPH+w==" 
Content-Type: application/javascript 
Content-Length: 1908322 
Connection: keep-alive 

à ce stade, je me attendais à obtenir un 304 mais serveur appearently détecté les modifications et a envoyé un 200.

Donc, je n'ai pas eu à utiliser les empreintes digitales. Où est-ce que je me suis trompé?

Répondre

0

Express le cache en permanence sur le serveur en le gardant en mémoire. Ma supposition est que l'infrastructure express maintient la cohérence du cache en vérifiant si la ressource mise en cache a été modifiée ou non.

L'envoi d'une requête avec un en-tête if-none-match et/ou if-modified-since est le comportement correct pour un user-agent. IE tente une optimisation en ignorant un aller-retour réseau, ce qui peut entraîner des pages incorrectement chargées. Ce que vous devez faire est soit utiliser les empreintes digitales - qui attribuent un nouveau nom générique à chaque ressource modifiée - ou avoir un contrôle plus bas sur la façon dont votre serveur sert les ressources, par exemple l'analyse de l'URL et la définition des réponses sont formés, une réponse 304 dans votre cas.

0

Je pense que le problème est avec le Google Chrome, apparemment quand je clique sur recharger, ou appuyez sur Entrée sur la barre d'URL, Chrome envoie toujours une requête If-None-Match au serveur, et obtient un 200. J'ai essayé avec Internet Explorer , et il serveur avec succès du cache sans frapper le serveur. Je me demande toujours ce qui ne va pas avec Chrome, et comment puis-je le faire fonctionner à partir du cache sans toucher le serveur.

Questions connexes