O Media CDN serve conteúdo o mais próximo possível dos usuários usando a infraestrutura de armazenamento em cache de borda global do Google para armazenar conteúdo em cache e reduzir a carga na infraestrutura de origem.
É possível controlar como o conteúdo é armazenado em cache para cada rota. Isso permite otimizar o comportamento com base no tipo de conteúdo, nos atributos de solicitação do cliente e nos requisitos de atualização.
Capacidade de armazenamento em cache
As seções a seguir descrevem quais respostas o Media CDN armazena em cache e como melhorar o offload de cache.
Comportamento padrão de armazenamento em cache
Por padrão, as seguintes configurações relacionadas ao cache são aplicadas a cada serviço de cache do Edge:
Modo de cache padrão de
CACHE_ALL_STATIC
:- Respeita as diretivas de cache da origem, como
Cache-Control
ouExpires
, até um TTL máximo configurável. - Armazena em cache tipos de mídia estáticos automaticamente com um TTL padrão de 3.600 segundos, se nenhuma diretiva de cache de origem estiver presente.
- Armazena em cache os códigos de status HTTP 200 e 206. O armazenamento em cache negativo não está ativado.
- Respeita as diretivas de cache da origem, como
Não armazena em cache respostas que tenham diretivas de controle de cache
no-store
ouprivate
ou que não sejam armazenáveis em cache.
As respostas que não são conteúdo estático ou que não têm diretivas de cache válidas não são armazenadas em cache, a menos que o armazenamento em cache seja configurado explicitamente. Para saber como substituir o comportamento padrão, consulte a documentação sobre os modos de cache .
O comportamento padrão é equivalente ao cdnPolicy
a seguir. As rotas sem
um cdnPolicy
explícito configurado se comportam como se tivessem a seguinte
configuração:
cdnPolicy: cacheMode: CACHE_ALL_STATIC defaultTtl: 3600s cacheKeyPolicy: includeProtocol: false excludeHost: false excludeQueryString: false signedRequestMode: DISABLED negativeCaching: false
Respostas armazenáveis em cache
Uma resposta armazenável em cache é uma resposta HTTP que o Media CDN pode armazenar e recuperar rapidamente, possibilitando tempos de carregamento mais rápidos. Nem todas as respostas HTTP são armazenáveis em cache.
É possível configurar modos de cache para cada rota para substituir esse
comportamento (por exemplo, usando o modo de cache CACHE_ALL_STATIC
para armazenar em cache tipos de mídia
comuns), mesmo que a origem não defina uma
diretiva de controle de cache na resposta.
As solicitações e respostas que atendem aos critérios definidos em respostas não armazenáveis em cache substituem a capacidade de armazenamento em cache.
A tabela a seguir descreve os requisitos para armazenar em cache respostas HTTP
específicas. As respostas GET
e HEAD
precisam obedecer a esses requisitos.
Atributo HTTP | Requisitos |
---|---|
Código de status | O código de status da resposta precisa ser 200, 203, 206, 300, 301, 302, 307, 308, 400, 403, 404, 405, 410, 451, 500, 501, 502, 503 ou 504. |
Métodos HTTP | GET e HEAD |
Cabeçalhos de solicitação | A maioria das diretivas de solicitação de armazenamento em cache é ignorada. Para mais informações, consulte Diretrizes de controle de cache. |
Cabeçalhos de resposta | Contém uma diretiva de armazenamento em cache
HTTP válida, como Tem um modo de cache que armazena esse conteúdo em cache ou tem um
cabeçalho |
Tamanho da resposta | Até 100 GiB. |
O cabeçalho HTTP Age
é definido
com base no momento em que o Media CDN armazenou a resposta em cache pela primeira vez e normalmente
representa os segundos desde que o objeto foi armazenado em cache em um local de
proteção de origem. Se a
origem gerar um cabeçalho de resposta "Age", use o modo de cache FORCE_CACHE_ALL
para
evitar revalidações quando o Age exceder o TTL do cache.
Para mais informações sobre como a Media CDN interpreta as diretivas de armazenamento em cache HTTP, consulte Diretivas de controle de cache.
Requisitos de origem
Para permitir que o Media CDN armazene em cache respostas de origem maiores que
1 MiB, uma origem precisa incluir o seguinte nos cabeçalhos de resposta para
solicitações HEAD
e GET
, a menos que especificado de outra forma:
- Um cabeçalho de resposta HTTP
Last-Modified
ouETag
(um validador). - Um cabeçalho HTTP
Date
válido. - Um cabeçalho
Content-Length
válido. - O cabeçalho de resposta
Content-Range
, em resposta a uma solicitaçãoRange GET
. O cabeçalhoContent-Range
precisa ter um valor válido no formatobytes x-y/z
(em quez
é o tamanho do objeto).
O protocolo de origem padrão é HTTP/2. Se as origens só oferecem suporte a HTTP/1.1, defina o campo de protocolo explicitamente para cada origem.
Respostas não armazenáveis em cache
A tabela a seguir detalha os atributos de solicitação e resposta que impedem que uma resposta seja armazenada em cache. As respostas que podem ser armazenadas em cache, mas que correspondem aos critérios "não armazenáveis em cache", não são armazenadas em cache.
Atributo HTTP | Requisito |
---|---|
Código de status | Um código de status diferente daqueles definidos como armazenáveis em cache, como HTTP 401, HTTP 412 ou HTTP 505. Esses códigos de status geralmente representam problemas do cliente, e não o status de origem. Armazenar essas respostas em cache pode levar a cenários de "envenenamento de cache", em que uma resposta "incorreta" acionada pelo usuário é armazenada em cache para todos os usuários. |
Cabeçalhos de solicitação | Para solicitações com um cabeçalho de solicitação
Uma diretiva |
Cabeçalhos de resposta | Tem um cabeçalho Tem um cabeçalho No modo |
Tamanho da resposta | Mais de 100 GiB. |
Essas regras são aplicadas além do modo de cache configurado. Especificamente:
- Com o modo de cache
CACHE_ALL_STATIC
configurado, apenas as respostas que são consideradas conteúdo estático ou com diretivas de cache válidas nos cabeçalhos de resposta são armazenadas em cache. As outras respostas são endereçadas por proxy. - O modo de cache
FORCE_CACHE_ALL
armazena todas as respostas em cache de forma incondicional, sujeito aos requisitos de não cacheabilidade mencionados anteriormente. - O modo de cache
USE_ORIGIN_HEADERS
exige que as respostas definam diretivas de cache válidas nos cabeçalhos de resposta, além de serem um código de status armazenável em cache.
Observações:
- As respostas que não são armazenadas em cache não têm as diretivas de controle de cache ou outros cabeçalhos alterados e são encaminhados como estão.
- Os cabeçalhos
Cache-Control
eExpires
das respostas podem ser agrupados em um único campoCache-Control
. Por exemplo, uma resposta comCache-Control: public
eCache-Control: max-age=100
em linhas separadas seria compactada comoCache-Control: public,max-age=100
. - Respostas não armazenáveis em cache (respostas que nunca seriam armazenadas em cache) não são contadas
como
Cache Egress
do ponto de vista de faturamento.
Como usar modos de cache
Os modos de cache permitem configurar quando o Media CDN precisa respeitar as diretivas de cache da origem, armazenar em cache tipos de mídia estática e armazenar em cache todas as respostas da origem, independentemente das diretivas definidas.
Os modos de cache são configurados no nível da rota e, combinados com substituições de TTL, permitem configurar o comportamento do cache por host, caminho, parâmetros de consulta e cabeçalhos (qualquer parâmetro de solicitação que possa ser correspondido).
- Por padrão, o Media CDN usa o modo de cache
CACHE_ALL_STATIC
, que armazena automaticamente tipos de mídia estáticos comuns por uma hora (3600 segundos), priorizando as diretivas de cache especificadas pela origem para respostas em cache. - É possível aumentar ou diminuir o TTL do cache aplicado às respostas sem um
TTL de cache explícito (uma diretiva
max-age
ous-maxage
) definindo o campocdnPolicy.defaultTtl
em uma rota. - Para evitar o armazenamento em cache de respostas não bem-sucedidas por mais tempo do que o esperado,
os códigos de status não 2xx (não bem-sucedidos) não são armazenados em cache de acordo com o
Content-Type
(tipo MIME) e não têm o TTL padrão aplicado.
Os modos de cache disponíveis, que são definidos no cdnPolicy.cacheMode
de cada
rota, são mostrados na tabela a seguir.
Modo cache | Comportamento |
---|---|
USE_ORIGIN_HEADERS |
Requer respostas de origem para definir diretivas de cache e cabeçalhos de armazenamento em cache válidos. Para uma lista completa de requisitos, consulte Respostas com armazenamento em cache. |
CACHE_ALL_STATIC |
Armazena respostas bem-sucedidas em cache automaticamente com conteúdo estático,
a menos que elas tenham uma diretiva O conteúdo estático inclui vídeo, áudio, imagens e recursos da Web comuns, conforme
definido pelo tipo MIME no cabeçalho de resposta
|
FORCE_CACHE_ALL |
Armazena incondicionalmente as respostas em cache, substituindo as diretivas de cache definidas pela origem. Não forneça conteúdo particular por usuário (como HTML dinâmico ou respostas da API) com esse modo configurado. |
BYPASS_CACHE | Qualquer solicitação que corresponda a uma rota com esse modo de cache configurado ignora o cache, mesmo que haja um objeto armazenado em cache que corresponda a essa chave. Recomendamos o uso apenas para depuração, porque o Media CDN foi projetado como uma infraestrutura de cache em escala planetária, e não como um proxy de uso geral. |
Tipos MIME de conteúdo estático
O modo de cache CACHE_ALL_STATIC
permite que o Media CDN armazene em cache automaticamente conteúdo estático comum, como vídeo, áudio, imagens e recursos da Web comuns com base no tipo MIME retornado no cabeçalho de resposta HTTP Content-Type
. No entanto, independentemente do tipo de mídia, o Media CDN
prioriza qualquer cabeçalho Cache-Control
ou Expires
explícito na resposta
de origem.
A tabela a seguir lista os tipos MIME que podem ser armazenados em cache automaticamente
com o modo de cache CACHE_ALL_STATIC
.
As respostas não são armazenadas em cache automaticamente se não tiverem um cabeçalho de resposta Content-Type
com um valor que corresponda aos valores a seguir. É necessário garantir
que a resposta defina uma diretiva de cache válida ou
use o modo de cache FORCE_CACHE_ALL
para armazenar as respostas em cache de forma incondicional.
Categoria | Tipos MIME |
---|---|
Recursos da Web | text/css text/ecmascript text/javascript application/javascript |
Fontes | Qualquer Content-Type que corresponda a font/* |
Imagens | Qualquer Content-Type que corresponda a image/* |
Vídeos | Qualquer Content-Type que corresponda a video/* |
Áudio | Qualquer Content-Type que corresponda a audio/* |
Tipos de documento formatado | application/pdf and application/postscript |
Observe o seguinte:
- O software servidor da Web de origem precisa definir o
Content-Type
de cada resposta. Muitos servidores da Web definem automaticamente o cabeçalhoContent-Type
, incluindo NGINX, Varnish e Apache. - O Cloud Storage define o cabeçalho
Content-Type
automaticamente no upload quando você usa o console do Google Cloud ou a CLI gcloud para fazer upload de conteúdo. - O Cloud Storage sempre fornece um cabeçalho
Cache-Control
para o Media CDN. Se nenhum valor for escolhido de maneira explícita, ele vai enviar um valor padrão. Como resultado, todas as respostas bem-sucedidas do Cloud Storage são armazenadas em cache de acordo com os valores padrão do Cloud Storage, a menos que você ajuste explicitamente os metadados de controle de cache para objetos no Cloud Storage ou use o modoFORCE_CACHE_ALL
para substituir os valores enviados pelo Cloud Storage.
Se uma resposta puder ser armazenada em cache com base no tipo MIME, mas tiver uma
diretiva de resposta Cache-Control
de private
ou
no-store
ou um cabeçalho Set-Cookie
, ela não será armazenada.
Outros tipos de mídia, como HTML (text/html
) e JSON
(application/json
), não são armazenados em cache por padrão. Esses tipos de respostas costumam ser
dinâmicos (por usuário) e não são adequados para
a arquitetura do Media CDN. Recomendamos o uso do
Cloud CDN para exibir recursos da Web e armazenar em cache as respostas da API.
Configurar TTLs de cache
As substituições de time to live (TTL) permitem definir valores de TTL padrão para conteúdo armazenado em cache
e substituir valores de TTL definidos nas diretivas de controle de cache max-age
e s-maxage
(ou cabeçalhos Expires
) definidas pelas origens.
Os TTLs, definidos por substituições ou por uma diretiva de cache, são otimistas. O conteúdo que raramente é acessado ou incomum pode ser removido do cache antes do TTL ser alcançado.
A tabela a seguir mostra três configurações de TTL.
Configuração | Padrão | Mínimo | Máximo | Descrição | Modos de cache aplicáveis |
---|---|---|---|---|---|
Default TTL | 1 hora (3600 segundos) |
0 segundo | 1 ano (31.536.000 segundos) |
O TTL a ser definido quando a origem não especificar um cabeçalho Se a origem especificar um cabeçalho Ao usar |
|
Max TTL | 1 dia (86.400 segundos) |
0 segundo | 1 ano (31.536.000 segundos) |
Para respostas em cache, o TTL máximo permitido. Valores maiores que
esse são limitados ao valor de maxTtl .
|
CACHE_ALL_STATIC |
Client TTL | Não definida por padrão. | 0 segundo | 1 dia (86.400 segundos) |
Para respostas armazenáveis em cache, o TTL máximo permitido na resposta (voltada para o cliente) downstream, se ele precisar ser diferente de outros valores de TTL. |
|
Definir qualquer valor de TTL como zero (0 segundos) faz com que todas as solicitações sejam revalidadas com a origem antes que uma resposta seja enviada e aumenta a carga na origem se definida de forma muito ampla.
Quando o modo de cache é definido como Use Origin Headers
, as configurações de TTL não podem ser
configuradas porque o Media CDN depende da origem para direcionar o
comportamento.
Observações:
- O valor do TTL máximo precisa ser sempre maior (ou igual) ao valor do TTL padrão.
- O valor do TTL do cliente precisa ser sempre menor (ou igual) ao valor do TTL máximo.
- Quando o Media CDN substitui um valor de TTL da origem, o
cabeçalho
Cache-Control
para o cliente também reflete esse valor. - Se a origem definir um cabeçalho
Expires
e o Media CDN substituir o TTL efetivo (com base no carimbo de data/hora), o cabeçalhoExpires
será substituído por um cabeçalhoCache-Control
na resposta downstream para o cliente.
Armazenamento em cache negativo
O armazenamento em cache negativo define como os códigos de status HTTP que não são de sucesso (diferentes de 2xx) são armazenados em cache pelo Media CDN.
Isso permite armazenar em cache respostas de erro, como redirecionamentos (HTTP 301 e 308) e respostas não encontradas (HTTP 404) mais próximas dos usuários, além de reduzir a origem de carga de forma mais ampla se a resposta não mudar e puder ser armazenada em cache.
Por padrão, o armazenamento em cache negativo fica desativado. A tabela a seguir mostra os valores
padrão de cada código de status quando o armazenamento em cache negativo está ativado e
negativeCachingPolicy
não é usado.
Códigos de status | Frase do motivo | TTL |
---|---|---|
HTTP 300 | Múltipla escolha | 10 minutos |
HTTP 301 e HTTP 308 | Redirecionamento permanente | 10 minutos |
HTTP 404 | Não encontrado | 120 segundos |
HTTP 405 | Método não encontrado | 60 segundos |
HTTP 410 | Gone (Desaparecido) | 120 segundos |
HTTP 451 | Indisponível por motivos legais | 120 segundos |
HTTP 501 | Não implementado | 60 segundos |
O conjunto padrão de códigos de armazenamento em cache negativo corresponde aos códigos de status heuristicamente armazenáveis em cache descritos na RFC 9110 do HTTP, com as seguintes exceções:
- O código HTTP 414 (URI muito longo) não tem suporte para armazenamento em cache para evitar a contaminação do cache.
- O código HTTP 451 (Indisponível por motivos legais) tem suporte para armazenamento em cache, conforme descrito no HTTP RFC 7725.
Se você precisar configurar seus próprios TTLs por código de status e substituir o comportamento
padrão, configure um cdnPolicy.negativeCachingPolicy
. Isso permite
definir o TTL para qualquer um dos códigos de status permitidos pela CDN de mídia:
300, 301, 302, 307, 308, 400, 403, 404, 405, 410, 451, 500, 501, 502, 503 e
504.
Por exemplo, para definir um TTL curto de 5 segundos para respostas HTTP 404 (Not Found) e um TTL de 10 segundos para respostas HTTP 405 (Method Not Allowed), use a seguinte definição YAML em cada rota aplicável:
cdnPolicy: negativeCaching: true negativeCachingPolicy: "404": 5s "405": 10s # other status codes to apply TTLs for
Para evitar o envenenamento do cache, não recomendamos ativar o armazenamento em cache para o
código de status 400 (solicitação inválida) ou 403 (proibido). Verifique se o servidor de origem
retorna um dos códigos como resultado da análise apenas dos componentes da solicitação
que estão incluídos na chave de cache. A contaminação de cache pode ocorrer, por exemplo, quando
o servidor de origem responde com uma resposta de erro 403 na ausência de um cabeçalho
Authorization
correto. Nesse caso, o armazenamento em cache da resposta de erro 403 faz com que
a CDN de mídia exiba a resposta de erro 403 para todas as solicitações
posteriores até que o TTL expire, mesmo que as solicitações tenham um cabeçalho
Authorization
correto.
Para desativar o armazenamento em cache negativo:
- Para desativar o comportamento padrão de armazenamento em cache negativo, defina
cdnPolicy.negativeCaching: false
em uma rota. As respostas de origem com diretivas de cache válidas e códigos de status armazenáveis em cache ainda são armazenadas em cache. - Para evitar o armazenamento em cache negativo de um código de status específico, mas ainda respeitar
as diretivas de cache de origem, omita o código de status
(
cdnPolicy.negativeCachingPolicy[].code
) na definiçãonegativeCachingPolicy
. - Para ignorar explicitamente as diretivas de cache de origem para um código de status
específico, defina
cdnPolicy.negativeCachingPolicy[].ttl
como0
(zero) para esse código de status.
Observações:
- Quando o
negativeCaching
está ativado em uma rota e uma resposta define diretivas de cache válidas, as diretivas de cache na resposta têm precedência. - Se você configurar um
negativeCachingPolicy
explícito e houver um TTL definido para o código de status fornecido, o TTL definido na política será sempre usado. - O valor máximo para um TTL definido por
negativeCachingPolicy
é de 1.800 segundos (30 minutos), mas as diretivas de cache de origem com um TTL maior são respeitadas. - Se o modo de cache estiver configurado como
FORCE_CACHE_ALL
, as diretivas de origem serão ignoradas em todos os casos.
Diretivas de controle de cache
O comportamento da CDN de mídia em relação às
diretivas Cache-Control
é definido aqui.
Se a diretiva não for aplicável a uma solicitação ou resposta, como
only-if-cached
(uma diretiva somente para clientes), "N/A" será marcado nessa coluna.
Diretiva | Solicitação | Resposta |
---|---|---|
no-cache |
A diretiva de solicitação no-cache é ignorada para evitar que os clientes iniciem ou forçem a revalidação para a origem. |
Uma resposta com Isso pode ser modificado por rota com o
modo de cache |
no-store |
A resposta a uma solicitação com no-store não é armazenada em cache. |
Uma resposta com Isso pode ser modificado por rota com o modo de cache |
public |
N/A | Uma resposta com a diretiva Não é necessário usar o cache |
private |
N/A | Uma resposta com a diretiva Isso pode ser modificado por rota com o
modo de cache Use |
max-age=SECONDS |
A diretiva de solicitação max-age é ignorada. Uma resposta em cache é retornada como se esse cabeçalho não estivesse incluído na solicitação. | Uma resposta com a diretiva max-age é armazenada em cache até o SECONDS definido. |
s-maxage=SECONDS |
N/A | Uma resposta com a diretiva Se
|
min-fresh=SECONDS |
A diretiva de solicitação min-fresh é ignorada. Uma resposta em cache
é retornada como se esse cabeçalho não estivesse incluído na solicitação. |
N/A |
max-stale=SECONDS |
A diretiva de solicitação Uma resposta em cache é retornada como se esse cabeçalho não estivesse incluído na solicitação. |
N/A |
stale-while-revalidate=SECONDS |
N/A | Nenhum efeito. Isso é passado ao cliente na resposta. |
stale-if-error=SECONDS |
A diretiva de solicitação stale-if-error é ignorada. Uma resposta em cache é retornada como se esse cabeçalho não estivesse incluído na solicitação. |
Nenhum efeito. Isso é passado ao cliente na resposta. |
must-revalidate |
N/A | Uma resposta com |
proxy-revalidate |
N/A | Uma resposta com |
immutable |
N/A | Nenhum efeito. Isso é passado ao cliente na resposta. |
no-transform |
N/A | Nenhuma transformação é aplicada pelo Media CDN. |
only-if-cached |
A diretiva de solicitação only-if-cached é ignorada. Uma resposta em cache é retornada como se esse cabeçalho não estivesse incluído na solicitação. |
N/A |
Sempre que possível, o Media CDN está em conformidade com o RFC (HTTP RFC 7234), mas prefere otimizar o descarregamento de cache e minimizar o impacto que os clientes podem ter na taxa de ocorrência e na carga de origem geral.
Para respostas que usam o cabeçalho Expires
HTTP/1.1:
- O valor do cabeçalho
Expires
precisa ser uma data HTTP válida, conforme definido no RFC 7231. - Uma data no passado, uma data inválida ou um valor de
0
indica que o conteúdo já expirou e requer revalidação. - O Media CDN vai ignorar o cabeçalho
Expires
se um cabeçalhoCache-Control
estiver presente na resposta.
O cabeçalho Pragma
HTTP/1.0, se presente em uma resposta, será ignorado e transmitido
como está para o cliente.
Chaves de cache
É possível reduzir o número de vezes que o Media CDN precisa entrar em contato com sua origem considerando o que identifica exclusivamente uma solicitação e removendo componentes que podem mudar com frequência entre as solicitações. O conjunto de componentes de solicitação é frequentemente chamado de "chave de cache".
As seções a seguir descrevem como configurar as chaves de cache.
Componentes da chave de cache
Uma chave de cache é o conjunto de parâmetros de solicitação (como os parâmetros de host, caminho e consulta) que são referenciados por um objeto armazenado em cache.
Por padrão, as chaves de cache para serviços de armazenamento em cache do Edge incluem o host, o caminho e os parâmetros de consulta da solicitação e são delimitados a um EdgeCacheService específico.
Componente | Incluído por padrão? | Detalhes |
---|---|---|
Protocolo | Não | As solicitações por HTTP e HTTPS fazem referência ao mesmo objeto armazenado em cache. Se você quiser retornar respostas diferentes para solicitações http: e https:,
defina |
Host | Sim | Os hosts diferentes não fazem referência aos mesmos objetos armazenados em cache. Se você tiver vários nomes de host direcionados ao mesmo EdgeCacheService e
eles estiverem exibindo o mesmo conteúdo, defina
|
Caminho | Sim | Sempre incluído na chave de cache e não pode ser removido. O caminho é a representação mínima de um objeto em cache. |
Parâmetros de consulta | Sim | Se os parâmetros de consulta não distinguirem entre respostas diferentes,
defina Se apenas alguns parâmetros de consulta precisarem ser incluídos em uma chave de cache, defina
|
Cabeçalhos | Não | Defina Especificar vários cabeçalhos que se combinam para ter uma grande variedade de valores (por exemplo, os valores de cabeçalho combinados identificam um único usuário) reduz drasticamente a taxa de ocorrência em cache e pode resultar em uma taxa de remoção maior e desempenho reduzido. |
Cookies | Não | Defina Especificar vários cookies que se combinam para ter uma grande variedade de valores (por exemplo, os valores de cookies combinados identificam um único usuário) reduz drasticamente a taxa de ocorrência em cache e pode resultar em uma taxa de expulsão mais alta e desempenho reduzido. |
Observe o seguinte:
- As chaves de cache não estão anexadas a uma origem configurada, permitindo que você atualize uma configuração de origem (ou substitua a origem por completo) sem o risco de "limpar" o cache (por exemplo, ao migrar o armazenamento de origem entre provedores).
- As chaves de cache são limitadas a um EdgeCacheService. Diferentes EdgeCacheServices têm diferentes namespaces de cache, o que impede que você armazene em cache objetos entre ambientes de produção, de preparação e outros ambientes de teste, mesmo que o host, o caminho ou outros componentes da chave de cache sejam correspondentes. A exclusão de um EdgeCacheService invalida todos os objetos armazenados em cache para esse serviço.
- As chaves de cache não têm escopo para uma rota específica. Várias rotas podem se referir à mesma chave de cache, especialmente se essas rotas corresponderem a componentes que não estão incluídas na chave de cache, como cabeçalhos de solicitação ou parâmetros excluídos. Isso pode ser útil se você quiser que várias rotas compartilhem o mesmo cache, mas retornem cabeçalhos de resposta ou configurações CORS diferentes.
- As chaves de cache não incluem a configuração de substituição de URL. Por exemplo, uma chave de cache é baseada na solicitação voltada ao usuário e não na solicitação "reescrita" final.
- Quando as solicitações assinadas são configuradas em uma rota, os atributos assinados não são
incluídos na chave de cache. A solicitação é tratada como se os parâmetros de consulta (assinados)
ou o componente de caminho, começando com
edge-cache-token
e terminando no próximo separador de caminho ("/"), não fizessem parte do URL.
Incluir ou excluir parâmetros de consulta
Para incluir ou excluir parâmetros de consulta específicos de uma chave de cache, adicione
o nome do parâmetro à configuração da chave de cache includedQueryParameters
ou excludedQueryParameters
em uma determinada rota.
Por exemplo, para incluir os parâmetros de consulta contentID
e country
e
ignorar todos os outros da chave de cache:
cdnPolicy: cacheMode: CACHE_ALL_STATIC defaultTtl: 86400s cacheKeyPolicy: includedQueryParameters: ["contentID", "country"]
Inclua os parâmetros de consulta que identificam exclusivamente o conteúdo e exclua aqueles que não fazem isso. Por exemplo, exclua parâmetros de consulta do Google Analytics, IDs de sessão de reprodução ou outros parâmetros exclusivos do cliente. Incluir mais parâmetros de consulta do que o necessário pode diminuir as taxas de ocorrência em cache.
Como alternativa, em vez de especificar quais parâmetros incluir na chave de cache, você pode escolher quais parâmetros excluir da chave de cache. Por exemplo, para excluir o ID de reprodução específico do cliente e as informações de carimbo de data/hora da chave de cache, configure o seguinte:
cdnPolicy: cacheMode: CACHE_ALL_STATIC defaultTtl: 86400s cacheKeyPolicy: excludedQueryParameters: ["playback-id", "timestamp"]
Para uma determinada rota, é possível especificar includedQueryParameters
ou
excludedQueryParameters
.
Se os parâmetros de consulta nunca forem usados para identificar exclusivamente o conteúdo em todas as solicitações,
você poderá remover todos os parâmetros de consulta da chave de cache de uma rota. Para fazer isso,
defina excludeQueryString
como true
, da seguinte forma:
cdnPolicy: cacheMode: CACHE_ALL_STATIC defaultTtl: 3600s cacheKeyPolicy: excludeQueryString: true
Se as solicitações assinadas estiverem ativadas em uma rota, os parâmetros de consulta usados para assinatura não serão incluídos na string de consulta e serão ignorados se incluídos. Incluir os parâmetros assinados na chave de cache faz com que cada solicitação do usuário seja única e exige que cada solicitação seja exibida na origem.
Ordenação de parâmetros de consulta
Os parâmetros de consulta (strings de consulta) são classificados por padrão para melhorar as taxas ocorrência em cache, porque os clientes podem reordenar ou solicitar o mesmo objeto em cache com uma ordem diferente de parâmetros de consulta.
Por exemplo, os parâmetros de consulta b=world&a=hello&z=zulu&p=paris
e
p=paris&a=hello&z=zulu&b=world
são classificados como a=hello&b=world&p=paris&z=zulu
antes que a chave de cache seja derivada. Isso permite que as duas solicitações sejam mapeadas para o mesmo
objeto em cache, evitando uma solicitação desnecessária para (e resposta da)
origem.
Se houver várias instâncias de uma chave de parâmetro de consulta, cada uma com valores
diferentes, os parâmetros serão classificados pelo valor completo. Por exemplo, a=hello
é
classificado antes de a=world
. A classificação não pode ser desativada.
Incluir cabeçalhos
Os nomes de cabeçalho não diferenciam maiúsculas de minúsculas e são convertidos em letras minúsculas pelo Media CDN.
Os cabeçalhos a seguir não podem ser incluídos na chave de cache:
- Qualquer cabeçalho que comece com
access-control-
- Qualquer cabeçalho que comece com
sec-fetch-
- Qualquer cabeçalho que comece com
x-amz-
- Qualquer cabeçalho que comece com
x-goog-
- Qualquer cabeçalho que comece com
x-media-cdn-
accept-encoding
accept
authorization
cdn-loop
connection
content-md5
content-type
cookie
date
forwarded
from
host
if-match
if-modified-since
if-none-match
origin
proxy-authorization
range
referer
referrer
user-agent
want-digest
x-csrf-token
x-csrftoken
x-forwarded-for
Para incluir o método HTTP na chave de cache, use o nome de cabeçalho especial
:method
.
Incluir cookies
Os nomes dos cookies diferenciam maiúsculas de minúsculas.
Cookies que começam com edge-cache-
em qualquer variação de letras maiúsculas ou minúsculas
não podem ser usados na chave de cache.
Revalidação, remoção e expiração
As redes de fornecimento de conteúdo, incluindo o Media CDN, operam armazenando em cache o conteúdo mais popular o mais próximo possível dos usuários.
O armazenamento amplo do Media CDN, além do proteção de origem, limita a necessidade de remover até mesmo conteúdo impopular. O conteúdo que é acessado poucas vezes por dia pode ser removido.
- As respostas em cache que atingem o TTL configurado podem não ser
excluídas imediatamente. Para conteúdo popular, o Media CDN
revalida se a resposta armazenada em cache é a versão mais recente emitindo uma
solicitação
HEAD
para a origem para confirmar se os cabeçalhos não mudaram. Em algumas circunstâncias, o Media CDN envia uma solicitação para a origem com um ou ambos os cabeçalhos de solicitação:If-None-Match
eIf-Modified-Since
. Nesse caso, as origens configuradas corretamente precisam retornar uma resposta HTTP 304 (Not Modified), sem os bytes do corpo, se o cache tiver a "última" cópia dessa resposta. - As respostas que definem uma diretiva de
cache
max-age
ous-maxage
ou que usam uma substituição de TTL para especificar um valor de TTL alto (por exemplo, 30 dias) podem não ser armazenadas em cache para o TTL completo. Não há garantia de que um objeto seja armazenado no cache por toda a duração, principalmente se ele for acessado com pouca frequência.
Se você estiver com uma taxa alta de expulsões, verifique se configurou as chaves de cache para excluir parâmetros que não identificam exclusivamente uma resposta.
Outras considerações
As considerações a seguir também podem ser aplicadas ao armazenamento em cache.
Cabeçalhos Vary
O cabeçalho Vary
indica que a resposta varia de acordo com os cabeçalhos de
solicitação do cliente. Se um cabeçalho Vary
estiver presente na resposta,
o Media CDN não vai armazená-lo em cache, a menos que ele especifique
um dos cabeçalhos configurados como uma
configuração de chave de cache ou um dos seguintes valores:
- Aceitar:usada para indicar quais tipos de mídia o cliente aceita.
- Accept-Encoding:usado para indicar quais tipos de compactação o cliente aceita.
- Available-Dictionary:usado para fornecer o hash de um dicionário disponível para compactação.
- Origin/X-Origin:geralmente usado para compartilhamento de recursos entre origens
- X-Goog-Allowed-Resources::oferece suporte à restrição de organização do Google Cloud.
- Sec-Fetch-Dest/Sec-Fetch-Mode/Sec-Fetch-Site::usado para buscar cabeçalhos de solicitação de metadados
O Media CDN armazena em cache as respostas com um cabeçalho Vary
na resposta
usando o valor do cabeçalho como parte da chave de cache. Se o cabeçalho Vary
na
resposta tiver vários valores, eles serão classificados lexicograficamente para garantir
que a chave do cache seja determinista.
O Media CDN armazena em cache até 100 variantes para uma determinada chave de cache e remove aleatoriamente as variantes do cache além desse limite. Quando você invalida explicitamente o cache de um determinado URL ou tag de cache, todas as variantes são invalidadas.
Ignorar o cache
É possível configurar o modo de cache BYPASS_CACHE
em uma rota para ignorar intencionalmente
o cache em solicitações correspondentes. Isso pode ser útil se você precisar ignorar
o cache para uma pequena fração de tráfego não crítico ou depurar a conectividade
de origem.
Para casos em que você precisa veicular respostas dinâmicas, como back-ends de API, recomendamos configurar um balanceador de carga de aplicativo externo.
É recomendável limitar o uso desse recurso a cenários de depuração para evitar a carga de origem não intencional. O tráfego de saída ao contornar o cache é precificado de acordo com as taxas de saída da Internet.
Invalidação de cache
Consulte Invalidação de cache.
Solicitações de intervalo de bytes
A CDN de mídia oferece suporte a solicitações de intervalo HTTP de uma parte, conforme definido na RFC 7233 (link em inglês).
Além disso, o Media CDN também usa solicitações de intervalo para buscar respostas maiores da origem. Isso permite que o Media CDN armazene em cache os fragmentos individualmente e não exige que o objeto inteiro seja buscado de uma só vez para ser armazenado em cache.
- Os objetos maiores que 1 MiB são buscados como solicitações de intervalo de bytes ("fragmentos") de até 2 MiB cada.
- Respostas de até 1 MiB podem ser buscadas sem suporte para intervalos de bytes na origem.
- Respostas maiores não são veiculadas se os intervalos de bytes não forem compatíveis com a origem.
O suporte da origem para solicitações de intervalo de bytes é determinado por:
- Um código de status HTTP 200 (OK) ou 206 (conteúdo parcial).
- Um cabeçalho de resposta
Content-Length
ouContent-Range
válido. - Um validador de resposta (
ETag
ouLast-Modified
).
As solicitações de preenchimento de origem individuais para cada "bloco" (intervalo de bytes) são registradas como
entradas de registro discretas e associadas à solicitação do cliente pai. É possível
agrupar essas solicitações combinando as solicitações no
jsonPayload.cacheKeyFingerprint
.
Para mais detalhes sobre o que é registrado, consulte a documentação do Cloud Logging.
Solicitações de intervalo abertas
O Media CDN oferece suporte a solicitações Range
"abertas" (por exemplo, uma
solicitação com Range: bytes=0-
) que mantêm uma solicitação aberta para a origem
até que a resposta seja fechada pela origem (por exemplo, a origem grava todos
os bytes na rede) ou expira.
Os intervalos de bytes abertos geralmente são usados por clientes que solicitam os segmentos HLS de baixa latência da Apple. Como cada fragmento CMAF é gravado na rede, o CDN pode armazenar em cache e entregar esse fragmento aos clientes.
Em outros casos, como quando a interoperabilidade com o DASH não é necessária, a playlist de mídia indica ao player quais bytes representam cada bloco:
#EXTINF:4.08, fs270.mp4 #EXT-X-PART:DURATION=1.02,URI="fs271.mp4",BYTERANGE=20000@0 #EXT-X-PART:DURATION=1.02,URI="fs271.mp4",BYTERANGE=23000@20000 #EXT-X-PART:DURATION=1.02,URI="fs271.mp4",BYTERANGE=18000@43000 #EXT-X-PRELOAD-HINT:TYPE=PART,URI="fs271.mp4",BYTERANGE-START=61000
É possível configurar o tempo de espera do Media CDN entre as leituras usando
o valor de configuração EdgeCacheOrigin.timeouts.readTimeout
. Isso normalmente
é configurado para um múltiplo (por exemplo, 2x) da duração desejada.
A seguir
- Revise o roteamento avançado.
- Entenda como se conectar a diferentes origens.
- Configure certificados TLS (SSL) para seu serviço.
- Configure solicitações assinadas para autenticar o acesso ao conteúdo.