Segunda-feira, 9 de dezembro de 2024
Por favor, permita que armazenemos em cache.
Com o crescimento da Internet ao longo dos anos, o Google também aumentou a quantidade de rastreamentos. Embora a infraestrutura de rastreamento do Google ofereça suporte a mecanismos de armazenamento em cache heurísticos, o número de solicitações que podem ser retornadas de caches locais diminuiu: há 10 anos, cerca de 0,026% do total de buscas eram armazenadas em cache, o que já não é tão impressionante. Hoje, esse número é de 0,017%.
Por que o armazenamento em cache é importante?
O armazenamento em cache é uma peça fundamental do grande quebra-cabeça que é a Internet. O armazenamento em cache permite que as páginas sejam carregadas rapidamente em novos acessos, economiza recursos de computação, e portanto, recursos naturais, e economiza uma quantidade enorme de largura de banda cara para clientes e servidores.
Permitir o armazenamento em cache local pode ajudar a melhorar o rastreamento do seu site, especialmente se ele for grande e tiver conteúdo que raramente muda em URLs individuais. A infraestrutura de rastreamento do Google
oferece suporte ao armazenamento em cache HTTP heurístico conforme definido pelo
padrão de armazenamento em cache HTTP, especificamente pelo cabeçalho de solicitação ETag
e If-None-Match
e pelo cabeçalho de solicitação Last-Modified
e If-Modified-Since
.
Recomendamos o uso de ETag
porque ele é menos propenso a erros. O
valor não é estruturado, ao contrário do valor Last-Modified
. E, se você tiver a opção,
defina os dois: a Internet vai agradecer. Talvez.
O que você considera uma mudança que exige que os clientes atualizem os caches é uma decisão sua. Recomendamos que você exija uma atualização de cache quando houver mudanças significativas no conteúdo. Se você tiver atualizado apenas a data de direitos autorais na parte de baixo da página, provavelmente não será significativo.
ETag
e If-None-Match
Os rastreadores do Google oferecem suporte a solicitações condicionais baseadas em ETag
exatamente como definido no
padrão de armazenamento em cache HTTP.
Ou seja, para indicar a preferência de armazenamento em cache aos rastreadores do Google, defina o valor Etag
como qualquer
string ASCII arbitrária (geralmente um hash do conteúdo ou número da versão, mas também pode ser um
fragmento do π, você decide) exclusiva para a representação do conteúdo hospedado pelo URL acessado.
Por exemplo, se você hospedar diferentes versões do mesmo conteúdo no mesmo URL (por exemplo, versão para dispositivos móveis e para computador), cada versão poderá ter seu próprio valor ETag
exclusivo.
Os rastreadores do Google que oferecem suporte a armazenamento em cache enviam o valor ETag
retornado para um rastreamento anterior desse URL no If-None-Match header
. Se o valor ETag
enviado pelo rastreador corresponder ao valor atual gerado pelo servidor, o servidor vai
retornar um código de status HTTP 304
(não modificado) sem corpo HTTP. Essa última parte, sem
corpo HTTP, é importante por alguns motivos:
- Seu servidor não precisa gastar recursos de computação para gerar conteúdo. Ou seja, você economiza dinheiro.
- Seu servidor não precisa transferir o corpo HTTP, ou seja, você economiza dinheiro.
No lado do cliente, como o navegador de um usuário ou o Googlebot, o conteúdo desse URL é recuperado do cache interno do cliente. Como não há transferência de dados envolvida, isso acontece muito rápido, deixando os usuários felizes e potencialmente economizando alguns recursos para eles.
Last-Modified
e If-Modified-Since
Assim como ETag
, os rastreadores do Google também oferecem suporte a solicitações condicionais Last-Modified based
, exatamente como definido no padrão de armazenamento em cache HTTP. Isso funciona da mesma
maneira que ETag
de uma perspectiva semântica: um identificador é usado para decidir
se o recurso pode ser armazenado em cache e oferece os mesmos benefícios que ETag
no
lado do cliente.
Temos algumas recomendações se você está usando Last-Modified
como uma diretiva de armazenamento em cache:
-
A data no cabeçalho
Last-Modified
precisa estar formatada de acordo com o padrão HTTP. Para evitar problemas de análise, recomendamos usar o seguinte formato de data: "Dia da semana, DD Mon YYYY HH:MM:SS fuso horário". Por exemplo, "Fri, 4 Sep 1998 19:15:56 GMT". -
Embora não seja obrigatório, considere também definir o campo
max-age
do cabeçalhoCache-Control
para ajudar os rastreadores a determinar quando rastrear novamente o URL específico. Defina o valor do campomax-age
como o número esperado de segundos em que o conteúdo não será alterado. Por exemplo,Cache-Control: max-age=94043
.
Exemplos
Se você for como eu, entender como o armazenamento em cache heurístico funciona é um desafio. No entanto, ver um exemplo da cadeia de solicitações e respostas parece me ajudar. Confira duas cadeias,
uma para ETag
/If-None-Match
e outra para
Last-Modified
/If-Modified-Since
, para visualizar como deve
funcionar:
ETag /If-None-Match |
Last-Modified /If-Modified-Since |
|
---|---|---|
Resposta de um servidor a um rastreamento: é a resposta em que um rastreador pode
salvar os campos de cabeçalho de condição prévia ETag e Last-Modified .
|
HTTP/1.1 200 OK Content-Type: text/plain Date: Fri, 4 Sep 1998 19:15:50 GMT ETag: "34aa387-d-1568eb00" ... |
HTTP/1.1 200 OK Content-Type: text/plain Date: Fri, 4 Sep 1998 19:15:50 GMT Last-Modified: Fri, 4 Sep 1998 19:15:56 GMT Cache-Control: max-age=94043 ... |
Solicitação condicional do rastreador subsequente: a solicitação condicional é baseada nos valores do cabeçalho de condição prévia salvos de uma solicitação anterior. Os valores são enviados de volta ao servidor para validação nos cabeçalhos de solicitação If-None-Match e If-Modified-Since .
|
GET /hello.world HTTP/1.1 Host: www.example.com Accept-Language: en, hu User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html) If-None-Match: "34aa387-d-1568eb00" ... |
GET /hello.world HTTP/1.1 Host: www.example.com Accept-Language: en, hu User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html) If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT ... |
Resposta do servidor à solicitação condicional: como os valores do cabeçalho de condição prévia
enviados pelo rastreador são validados no servidor, o servidor retorna um código de status HTTP 304 (sem um corpo HTTP) para o rastreador. Isso vai acontecer em todas as solicitações
subsequentes até que as condições prévias falhem na validação (a data de ETag ou
Last-Modified muda do lado do servidor).
|
HTTP/1.1 304 Not Modified Date: Fri, 4 Sep 1998 19:15:50 GMT Expires: Fri, 4 Sep 1998 19:15:52 GMT Vary: Accept-Encoding If-None-Match: "34aa387-d-1568eb00" ... |
HTTP/1.1 304 Not Modified Date: Fri, 4 Sep 1998 19:15:50 GMT Expires: Fri, 4 Sep 1998 19:15:51 GMT Vary: Accept-Encoding If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT ... |
Se você quer deixar seus usuários felizes e talvez também economizar um pouco de dinheiro na conta de hospedagem, converse com seu provedor de hospedagem ou CMS ou com seus desenvolvedores sobre como ativar o armazenamento em cache HTTP para seu site. No mínimo, seus usuários vão gostar um pouco mais de você.
Se você quiser conversar sobre o armazenamento em cache, acesse a Comunidade de Ajuda da Central da Pesquisa mais próxima. Se você tiver comentários sobre como estamos armazenando em cache, deixe seu feedback na documentação sobre armazenamento em cache publicada com esta postagem do blog.