¿Qué encabezados debería enviar para detener por completo todas las solicitudes al servidor después de que el contenido se haya almacenado en caché?
Tenemos un servidor de latencia muy alta (Sigh, VMWare), por lo que incluso enviar una HEAD
solicitud al servidor tarda + 40ms.
Actualmente estos son los encabezados que se envían / reciben;
Primera solicitud
El cliente envía;
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
El servidor responde;
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
Por lo tanto, envía un conjunto de encabezados Cache-Control
y Expires
a 365 días en el futuro. Desafortunadamente, en la segunda actualización, solicita nuevamente el objeto con un If-Modified-Since
encabezado.
Segundo requisito
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
Respuesta;
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
Desafortunadamente, debido al software proxy obsoleto tonto que no podemos usar Keep-Alive
, o poner cualquier otro servidor / proxy frente a la aplicación. Tampoco podemos mejorar el rendimiento del servidor y reducir la latencia de la red. He estado tratando de averiguar qué encabezados podemos enviar para deshacernos de las solicitudes 301. He intentado usar ETags pero eso no hace ninguna diferencia, todavía envía un If-modified-since
encabezado. También intenté eliminar el Last-Modified
encabezado, pero eso solo causa una solicitud GET estándar sin almacenamiento en caché (revisé los registros, el servidor aún recibe solicitudes).
Los clientes son una combinación de Firefox (principalmente), IE 7, 8 y (algunos) 9, Chrome y Safari, pero este comportamiento parece estar apareciendo en todos los navegadores probados.
TL; DR;
Red terrible, ¿qué encabezados debo enviar para decirles a los clientes que nunca envíen If-modified-since
solicitudes al servidor para validar su caché y que mantengan el contenido en caché hasta que Expires
se cumpla el encabezado?
Probablemente me estoy perdiendo algo obvio, pero todo lo que intento parece dar los mismos resultados.
Tenemos un servidor NGINX sentado frente a nuestro servidor de aplicaciones para que pueda agregar / eliminar los encabezados que desee. Nuestro proxy no es compatible con Keep-Alive y no hay manera de mejorar el rendimiento de la red. Debido al terrible diseño del software, la aplicación web carga +100 recursos en cada carga de página (Sí, el software empresarial es una mierda) con una latencia de ~ 40-50 ms por objeto.
text/plain
?