Cloudflare não faz cache como esperado

7

Estou me perguntando por que o Cloulflare não armazenaria em cache um determinado arquivo js estático.

Dado o reuqest:

curl -I http://www.testlifeinuk.com/dist/lifeinuk.js

os cabeçalhos retornaram como:

HTTP/1.1 200 OK
Date: Mon, 12 Jan 2015 10:59:21 GMT
Content-Type: application/javascript
Connection: keep-alive
Set-Cookie: __cfduid=d11a9f01292153436a211a9d807a3399b1421060361; expires=Tue, 12-Jan-16 10:59:21 GMT; path=/; domain=.testlifeinuk.com; HttpOnly
X-Powered-By: Express
Etag: W/"507660-1420797981000"
Cache-Control: public, max-age=1382400
Last-Modified: Fri, 09 Jan 2015 10:06:21 GMT
Vary: Accept-Encoding
Via: 1.1 vegur
CF-Cache-Status: MISS
Expires: Wed, 28 Jan 2015 10:59:21 GMT
Server: cloudflare-nginx
CF-RAY: 1a78d818b4af0b81-LHR

O que me intriga é que, não importa quantas vezes eu faça o pedido, ele sempre retorna

CF-Cache-Status: MISS

Alguma ideia do porquê?

    
por Wudong 12.01.2015 / 12:07

3 respostas

6

Você precisa definir a regra de página no painel do administrador do CloudFlare. A primeira etapa para usar regras de página é definir um padrão que define quando a regra é acionada. Esses padrões podem ser simples, como um único URL, ou complicados, incluindo vários curingas. Imagine que você tenha um sistema de gerenciamento de conteúdo com um único URL:

http://www.testlifeinuk.com

Agora, se você tentar criar uma regra com padrão de URL:

http://www.testlifeinuk.com

Apenas a página inicial será armazenada em cache!

Se você quiser armazenar todo o site em cache, é necessário usar o curinga da seguinte forma:

 *testlifeinuk.com/*

Dessa forma, todas as páginas e recursos serão armazenados em cache pelo Cloudflare assim:

http://www.testlifeinuk.com/dist/lifeinuk.js
http://www.testlifeinuk.com/mypage.html
https://www.testlifeinuk.com/mypage.html
https://testlifeinuk.com/mypage.html

e o resultado do cabeçalho será:

HTTP/1.1 200 OK
Date: Mon, 25 May 2015 10:21:05 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.4.39-0+deb7u2
Expires: Mon, 25 May 2015 10:51:05 GMT
Cache-Control: public, max-age=1800
Pragma: no-cache
Vary: Accept-Encoding
CF-Cache-Status: HIT            <<<<< Look this parameter
Server: cloudflare-nginx
CF-RAY: 1ec082ee43150e60-MXP
Content-Encoding: gzip

considera

    
por 25.05.2015 / 12:20
3

Além do que @Michelangelo mencionou sobre a necessidade de configurar o CloudFlare Page Rules no início, também é necessário verificar se os cabeçalhos de resposta estão definidos corretamente, para que você não substitua o comportamento padrão de armazenamento em cache:

If the Cache-Control header is set to "private", "no-store", "no-cache", or "max-age=0", or if there is a cookie in the response, then CloudFlare will not cache the resource. Otherwise, if the Cache-Control header is set to "public" and the "max-age" is greater than 0, or if the Expires headers are set any time in the future, we will cache the resource.

Veja: link

E é por isso que @Rudy Lee disse que não se esqueça de definir a opção maxAge porque o padrão maxAge é 0 no Express.

Veja: link

    
por 29.06.2017 / 11:37
0

Outra possibilidade é que algo definido em seu .htaccess possa estar em conflito com o cache do Cloudflare. Se os cabeçalhos de expiração forem definidos, eles substituirão as configurações de armazenamento em cache do Cloudflare. Achei que este era o caso do meu próprio site e nem percebi inicialmente até fazer um monte de testes com o link

    
por 26.08.2018 / 08:38