Cloudflare: HTML estático em cache quando o URL tem uma sequência de consultas

10

Pergunta rápida do 'novo usuário' do CloudFlare para você:

INTRODUÇÃO: As páginas HTML servidas pelo meu servidor de origem nunca são alteradas. Todo o conteúdo dinâmico é baixado via JavaScript depois que a página é carregada no navegador do usuário. O conteúdo dinâmico derivado do JavaScript depende em parte da sequência de consultas da URL, mas a sequência de consultas em si não afeta o conteúdo HTML baixado originalmente. Os seguintes URLs, portanto, geram exatamente o mesmo HTML a partir da origem antes de serem usados ​​pelo JavaScript no navegador:

https://www.example.com/private/my-investments?portfolioID=296

https://www.example.com/private/my-investments?portfolioID=325

https://www.example.com/private/my-investments?portfolioID=319

PERGUNTA: Como o CloudFlare não armazena em cache o HTML por padrão, como devo construir minhas Regras da página para que uma única cópia em cache de https://www.example.com/private/my-investments?[anyValue] seja retornada a todos os usuários ? Aqui está o que eu tentei:

"CACHE TUDO:" Usar a diretiva 'Cache Tudo' faz com que meu HTML seja armazenado em cache (bom), mas ele usa toda a cadeia de caracteres de consulta como parte da chave do cache (incorreta). Portanto, se um usuário acessar o seguinte URL ...

https://www.example.com/private/my-investments?portfolioID=296

... e, dez segundos depois, atinge o mesmo URL com uma string de consulta diferente, como:

https://www.example.com/private/my-investments?portfolioID=325

... O CloudFlare trata essa última solicitação como uma MISS de cache (cf-cache-status: MISS) e atinge meu servidor de origem novamente. Isso apesar do HTML retornado da origem ser idêntico para os dois URLs.

"IGNORE QUERY STRING CACHING:" Pensei em corrigir esse problema selecionando a opção "IGNORE QUERY STRING CACHING". Porém, ao usar esta opção em uma regra de página, nenhum HTML é armazenado em cache; Somente arquivos .js, .css e .png são armazenados em cache. E mais uma vez, minha origem é atingida em cada chamada de dados HTML. :(

Sinto que devo estar perdendo algo óbvio. Alguma ideia?

ATUALIZAÇÃO : Teve uma idéia que eu gostaria de executar por você. Posso resolver esse problema alterando meu esquema de URL interno para usar '#' em vez de '?' Então, em vez de um URL como ...

https://www.example.com/private/my-investments?portfolioID=296

..Eu usaria algo como:

https://www.example.com/private/my-investments#portfolioID=296

Isso impediria que os parâmetros da string de consulta fossem transmitidos ao CloudFlare ... O que você acha?

Festus

Festus Martingale
fonte
Usando "#" em vez de "?" no URL resolveu o problema. Os sysops podem prosseguir e excluir minha pergunta.
Festus Martingale
4
Outros podem aprender com o que você descobriu aqui, então talvez você possa fornecer o que fez acima como resposta (com um pouco de elaboração) e aceitá-lo quando puder. Obrigado.
dan

Respostas:

4

(Resposta adicionada ao @Festus Martingale para marcar a pergunta como respondida).

Substituir ?por #resolvido o problema, pois impede que a cadeia de consulta seja transmitida para o cloudflare, pois ela aparece como um fragmento de hash.

Chris Rutherfurd
fonte
Meu nome é Festus. Eu marquei isso como uma resposta.
Festus Martingale