Quais cabeçalhos devo enviar para interromper imediatamente todas as solicitações ao servidor após o cache do conteúdo?
Como temos um servidor de latência muito alta (Suspiro, VMWare), o envio de uma HEAD
solicitação ao servidor leva + 40ms.
Atualmente, esses são os cabeçalhos que estão sendo enviados / recebidos;
Primeiro pedido
Cliente envia;
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
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
Portanto, ele envia um cabeçalho Cache-Control
e Expires
definido para 365 dias no futuro. Infelizmente, na segunda atualização, ele solicita o objeto novamente com um If-Modified-Since
cabeçalho.
Segundo pedido
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
Resposta;
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
Infelizmente, devido ao software proxy bobo desatualizado, não podemos usar Keep-Alive
ou colocar outros servidores / proxys na frente do aplicativo. Também não podemos melhorar o desempenho do servidor e reduzir a latência da rede. Eu tenho tentado descobrir quais cabeçalhos podemos enviar para nos livrarmos das 301 solicitações. Eu tentei usar ETags, mas isso não faz diferença, ele ainda envia umIf-modified-since
cabeçalho. Eu também tentei remover o Last-Modified
cabeçalho, mas isso apenas causa uma solicitação GET padrão sem cache (verifiquei os logs, o servidor ainda está recebendo solicitações).
Os clientes são uma mistura de Firefox (principalmente), IE 7, 8 e (alguns) 9, Chrome e Safari, mas esse comportamento parece estar aparecendo em todos os navegadores testados.
TL; DR;
Rede terrível, que cabeçalhos devo enviar para dizer aos clientes para nunca enviar If-modified-since
solicitações ao servidor para validar seu cache e manter o conteúdo em cache até que o Expires
cabeçalho seja atingido?
Provavelmente estou perdendo algo óbvio, mas tudo o que tento parece produzir os mesmos resultados.
Temos um servidor NGINX em frente ao servidor de aplicativos, para que eu possa adicionar / remover cabeçalhos como desejar. Nosso proxy não oferece suporte ao Keep-Alive e não tem como melhorar o desempenho atroz da rede. Devido ao péssimo design do software, o aplicativo Web carrega +100 recursos em cada carregamento de página (sim, o software corporativo é uma porcaria) com uma latência de ~ 40-50ms por objeto.
text/plain
?