Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Gerenciamento de Cache

Boa noite,

Estou trabalhando em uma SPA servida por um apache 2.4. Configurei o cache conforme o response abaixo:

No build da aplicação sempre gero um hash novo para cada arquivo, que é concatenado ao nome do arquivo, para tentar avisar para o browser que é um novo arquivo, porem quando faço deploy de uma nova versão da aplicação estou tendo que limpar o cache para pegar a ultima versão.

O que preciso fazer para atualizar automaticamente ?

HTTP/1.1 200 OK
Date: Wed, 09 Aug 2017 22:26:20 GMT
Server: Apache/2.4.25 (Unix) OpenSSL/1.0.2k
Upgrade: h2
Connection: Upgrade, Keep-Alive
Last-Modified: Tue, 08 Aug 2017 17:50:22 GMT
ETag: "8a14-5564198ebb380-gzip"
Accept-Ranges: bytes
Cache-Control: max-age=31536000
Expires: Thu, 09 Aug 2018 22:26:20 GMT
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
Content-Length: 7686
Keep-Alive: timeout=5, max=100
Content-Type: text/css
6 respostas

O que esta sendo mostrado no seu Developer Tools, pode ter uma relação com o ETag gerado, porém se for o caso a resposta deveria ser 304 e não 200.

Como ficou o carregamento na aba Network do seu arquivo? Tem como mandar um print aqui?

O estranho é que sempre retorna 200 na resposta de todo o conteúdo.

curl 'https://dominio.com.br/portal/' -H 'Referer: https://dominio.com.br/' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' --compressed ; curl 'https://dominio.com.br/shared-estatico/css/estilo-portal.min.css' -H 'Referer: https://dominio.com.br/portal/' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' --compressed ;

Das duas uma:

Ou seu html tá sendo cacheado então ele vai apontar pra versão antiga dos assets. Nesse caso, precisa rever os headers de cache do HTML (max age 0 e no-cache).

Ou tem algo errado no seu build que concatena o hash e depois chama o arquivo hasheado. Suspeitei disso pq no curl que você colocou o CSS tá sem o hash.

Olá Sérgio,

Obrigado pela resposta.

Realmente o css não tem hash, vou arrumar isso. Mas, todos outros arquivos possuem hash, porem, por ser uma SPA e utilizar webpack para gerar os bundles da aplicação, o meu html esta dentro do javascript.

Como exemplo segue o header de um dos arquivos javascript:

  • Geral

    Request URL:https://meudominio.com.br/portal/main.733f5be40d71c88773ca.bundle.js
    Request Method:GET
    Status Code:200 OK (from disk cache)
    Remote Address:170.66.8.151:443
    Referrer Policy:no-referrer-when-downgrade
  • Response Headers

Accept-Ranges:bytes
Cache-Control:max-age=31536000
Content-Encoding:gzip
Content-Length:5612
Content-Type:application/javascript
Date:Thu, 10 Aug 2017 23:54:58 GMT
ETag:"66f5-555de46792b40-gzip"
Expires:Fri, 10 Aug 2018 23:54:58 GMT
Last-Modified:Thu, 03 Aug 2017 19:20:37 GMT
Server:Apache/2.4.25 (Unix) OpenSSL/1.0.2k
Vary:Accept-Encoding,User-Agent
  • Request Headers
Provisional headers are shown
Referer:https://meudominio.com.br/portal/
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36

Abaixo segue o curl dos demais arquivos da aplicação.

curl 'https://meudominio.com.br/portal/' -H 'Referer: https://meudominio.com.br/' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' --compressed ;

curl 'https://meudominio.com.br/shared-estatico/css/estilo-portal.min.css' -H 'Referer: https://meudominio.com.br/portal/' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' --compressed ;

curl 'https://meudominio.com.br/portal/inline.2ca5daec483e6b4ac9fc.bundle.js' -H 'Referer: https://meudominio.com.br/portal/' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' --compressed ;

curl 'https://meudominio.com.br/portal/polyfills.36ef926caf31295f44c0.bundle.js' -H 'Referer: https://meudominio.com.br/portal/' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' --compressed ;

curl 'https://meudominio.com.br/portal/vendor.f323d2d0a1c7bac8dddd.bundle.js' -H 'Referer: https://meudominio.com.br/portal/' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' --compressed ;

curl 'https://meudominio.com.br/portal/main.733f5be40d71c88773ca.bundle.js' -H 'Referer: https://meudominio.com.br/portal/' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' --compressed ;

curl 'https://meudominio.com.br/portal/2.7cb8dd99c3c190108798.chunk.js' -H 'Referer: https://meudominio.com.br/portal/' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' --compressed ;

curl 'https://meudominio.com.br/shared-estatico/img/logo/logo.jpg' -H 'Referer: https://meudominio.com.br/portal/autenticar' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' --compressed

Sérgio,

Então, tenho que configurar na minha index.html, max-age 0 , e no-cache, certo?

solução!

Se o seu servidor faz a negociacao do Etag corretamente (e pelos headers que vc mandou, parece que sim), eu colocaria apenas Cache-Control: max-age=0 no HTML de entrada.

Outra opção, mais agressiva, seria usar Cache-Control: no-cache que aí ele nunca vai colocar o HTML no cache.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software