Voltar ao blog

Timing-Allow-Origin: O que a Analytics Enxerga na Resource Timing API

O cabeçalho Timing-Allow-Origin controla quanto detalhe de temporização cross-origin uma página pode ler. Veja o que isso significa para a medição de desempenho com foco em privacidade.

O cabeçalho que ninguém define de propósito

A maioria das equipes só conhece o Timing-Allow-Origin (TAO) quando um gráfico em sua ferramenta de monitoramento mostra zeros suspeitos. Recursos cross-origin — fontes, imagens de uma CDN, um script de terceiros — aparecem na Resource Timing API, mas suas sub-temporizações detalhadas retornam como 0, a menos que o servidor que responde opte explicitamente por participar. Essa opção de participação é o cabeçalho TAO, e entendê-lo é essencial se você quer dados de desempenho honestos sem recorrer a rastreamento invasivo.

O padrão Resource Timing expõe uma entrada PerformanceResourceTiming para cada requisição que uma página faz. Para recursos de mesma origem você obtém o detalhamento completo: consulta de DNS, conexão TCP, negociação TLS, início da requisição e temporizações de resposta. Para recursos cross-origin, a especificação restringe deliberadamente o que um documento pode ler, porque essas temporizações detalhadas podem vazar informações sobre o estado da rede do usuário, o conteúdo do cache ou o comportamento interno de outra origem.

O que é zerado

Sem um cabeçalho TAO correspondente, os seguintes atributos de uma entrada PerformanceResourceTiming cross-origin são fixados em zero: redirectStart, redirectEnd, domainLookupStart, domainLookupEnd, connectStart, connectEnd, secureConnectionStart, requestStart, responseStart, transferSize, encodedBodySize e decodedBodySize. Você ainda obtém startTime, duration, responseEnd, além do name e do initiatorType do recurso. Na prática, isso significa que você consegue saber que um recurso foi carregado e quanto tempo levou no total, mas não para onde o tempo foi nem quantos bytes cruzaram a rede.

A verificação é definida pelo algoritmo timing allow check na especificação Resource Timing. Um recurso passa se sua resposta trouxer Timing-Allow-Origin com um valor que seja igual à origem do documento requisitante ou o curinga *.

Timing-Allow-Origin: https://example.com
# or, to allow any origin
Timing-Allow-Origin: *

Por que isso importa para analytics com foco em privacidade

A Monoid mede o desempenho a partir do campo — navegações reais por visitantes reais — sem cookies, sem localStorage e sem fingerprinting. As APIs Resource Timing e Navigation Timing são a forma baseada em padrões de fazer isso, e o TAO é o mecanismo que a plataforma usa para manter os dados de temporização cross-origin confidenciais por padrão.

Esse padrão é um recurso de privacidade, não um obstáculo. O zeramento existe precisamente para impedir que uma página investigue origens de terceiros em busca de canais laterais de temporização. Quando recomendamos que você defina Timing-Allow-Origin nos seus próprios ativos estáticos e na CDN, estamos pedindo que você habilite a visibilidade da sua própria infraestrutura para a sua própria medição — não que enfraqueça a proteção de ninguém.

Os Core Web Vitals reforçam esse ponto. O Largest Contentful Paint é frequentemente uma imagem cross-origin ou uma fonte web. Se essas respostas não tiverem um cabeçalho TAO, você ainda pode observar o elemento LCP por meio da Largest Contentful Paint API, mas perde as sub-temporizações de requisição e resposta que diriam se um DNS lento, um handshake TLS frio ou uma transferência grande causou o atraso. Adicionar o cabeçalho às origens dos seus ativos transforma um número opaco em um número acionável.

Configurando corretamente

Algumas notas práticas. Primeiro, um transferSize diferente de zero também permite distinguir um acerto de cache (um transferSize pequeno) de uma busca na rede, o que é inestimável ao diagnosticar o desempenho de visualizações repetidas. Segundo, se você serve fontes cross-origin, o atributo CSS crossorigin e o CORS são uma preocupação separada do TAO — você pode precisar dos dois. Terceiro, prefira nomear origens específicas a usar * sempre que possível, para que apenas os documentos que legitimamente precisam dos dados os recebam.

No Cloudflare, você pode adicionar o cabeçalho na borda com uma Transform Rule ou em uma resposta de Worker, aplicando-o aos caminhos dos seus ativos. Como a Monoid roda na mesma borda, os dados de temporização que os navegadores dos seus visitantes coletam fluem diretamente para métricas agregadas e sem identificadores — sem necessidade de perfil por usuário para saber que sua imagem principal gasta 400ms em TLS.

A conclusão

Timing-Allow-Origin é um cabeçalho pequeno com influência desproporcional sobre quanto você pode aprender com dados de desempenho de campo. O padrão do navegador — zerar as sub-temporizações cross-origin — é uma salvaguarda de privacidade deliberada, e se alinha perfeitamente com o modo como analytics com foco em privacidade deve funcionar: medir agregados a partir de APIs padrão, habilitar explicitamente o detalhamento das suas próprias origens e nunca tratar a impressão digital de rede de um usuário como algo a ser coletado. Defina o TAO nos seus ativos, e sua depuração de Web Vitals fica mais precisa sem nenhum rastreamento.

Sources

Comments

Loading comments…