Quels en-têtes dois-je envoyer pour arrêter définitivement toutes les demandes au serveur après la mise en cache du contenu?
Nous avons un serveur à latence très élevée (Sigh, VMWare) donc même l'envoi d'une HEAD
requête au serveur prend + 40 ms.
Actuellement, ce sont les en-têtes envoyés / reçus;
Première demande
Le client envoie;
GET http://dugong:8080/Rvi24mYJkxFRGNzq73PPvgWGh1j/IMG_2071.jpg HTTP/1.1
Host: dugong:8080
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20100101 Firefox/9.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Pragma: no-cache, no-cache, no-cache
Cache-Control: no-cache, no-cache, no-cache
Le serveur répond;
HTTP/1.1 200 OK
Server: nginx/1.0.11
Date: Wed, 01 Feb 2012 14:51:51 GMT
Content-Type: text/plain
Vary: Accept-Encoding
Last-Modified: Tue, 31 Jan 2012 10:45:11 GMT
Content-Length: 14
Expires: Thu, 31 Jan 2013 14:51:51 GMT
Cache-Control: max-age=31536000
Donc , il envoie un Cache-Control
et Expires
jeu d' en- tête à 365 jours dans l'avenir. Malheureusement, lors du deuxième rafraîchissement, il demande à nouveau l'objet avec un en- If-Modified-Since
tête.
Seconde demande
GET http://dugong:8080/Rvi24mYJkxFRGNzq73PPvgWGh1j/IMG_2071.jpg HTTP/1.1
Host: dugong:8080
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20100101 Firefox/9.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
If-Modified-Since: Tue, 31 Jan 2012 10:45:11 GMT
Cache-Control: max-age=0
Réponse;
HTTP/1.1 304 Not Modified
Server: nginx/1.0.11
Date: Wed, 01 Feb 2012 14:58:00 GMT
Vary: Accept-Encoding
Expires: Thu, 31 Jan 2013 14:58:00 GMT
Cache-Control: max-age=31536000
Malheureusement, en raison d'un stupide logiciel de proxy obsolète, nous ne pouvons pas utiliser Keep-Alive
ou placer d'autres serveurs / proxys devant l'application. Nous ne pouvons pas non plus améliorer les performances du serveur et réduire la latence du réseau. J'ai essayé de comprendre quels en-têtes nous pouvons envoyer pour se débarrasser des 301 demandes. J'ai essayé d'utiliser ETags mais cela ne fait aucune différence, il envoie toujours un en- If-modified-since
tête. J'ai également essayé de supprimer l'en- Last-Modified
tête, mais cela provoque simplement une demande GET standard sans mise en cache (vérifié les journaux, le serveur reçoit toujours des demandes).
Les clients sont un mélange de Firefox (principalement), IE 7, 8 et (certains) 9, Chrome et Safari, mais ce comportement semble apparaître dans tous les navigateurs testés.
TL; DR;
Terrible network, quels en-têtes dois-je envoyer pour dire aux clients de ne jamais envoyer de If-modified-since
demandes au serveur pour valider leur cache et de conserver le contenu en cache jusqu'à ce que l'en- Expires
tête soit rencontré?
Il me manque probablement quelque chose d'évident, mais tout ce que j'essaie semble donner les mêmes résultats.
Nous avons un serveur NGINX assis devant notre serveur d'applications afin que je puisse ajouter / supprimer les en-têtes à ma guise. Notre proxy ne prend pas en charge Keep-Alive et le leur n'est aucun moyen d'améliorer les performances du réseau attrayant. En raison de la mauvaise conception du logiciel, l'application Web charge +100 ressources à chaque chargement de page (ouais, le logiciel d'entreprise est nul) avec une latence de ~ 40-50 ms par objet.
text/plain
?