Migrar para a API Reporting v1

Uma nova versão da API Reporting está disponível. Ela é mais privada e tem mais chances de ser compatível com vários navegadores.

A API Reporting informa sobre erros que acontecem no seu site quando os visitantes o usam. Ela oferece visibilidade sobre intervenções e falhas do navegador, violações da Política de Segurança de Conteúdo, violações de COOP/COEP, avisos de suspensão de uso e muito mais.

Uma nova versão da API Reporting está disponível. A nova API é mais enxuta e tem mais chances de ser compatível com vários navegadores.

Resumo

Desenvolvedores de sites

Se você já tem funcionalidade de relatórios para seu site: migre para a v1 usando o novo cabeçalho (Reporting-Endpoints), mas mantenha o cabeçalho legado por algum tempo (Report-To). Consulte Migração: exemplo de código.

Se você estiver adicionando a funcionalidade de relatórios ao seu site agora: use apenas o novo cabeçalho (Reporting-Endpoints).

⚠️ Nos dois casos, defina o cabeçalho Reporting-Endpoints em todas as respostas que possam gerar relatórios.

Desenvolvedores de serviços de relatórios

Se você estiver mantendo um serviço de endpoint ou operando o seu próprio, espere mais tráfego à medida que você ou desenvolvedores externos migrarem para a API Reporting v1 (cabeçalho Reporting-Endpoints).

Continue lendo para conferir detalhes e exemplos de código.

Registro de erros de rede

Um novo mecanismo para o registro de erros de rede será desenvolvido. Quando ele estiver disponível, mude da API Reporting v0 para esse novo mecanismo.

Demonstração e código

Diferenças entre a v0 e a v1

O que muda?

  • A superfície da API é diferente.
v0 (legada)
 Report-To: { group: "main-endpoint", "max_age": 86400, "endpoints": [ { "url": ... }, { "url": ... }] }, { group: "default-endpoint", "max_age": 86400, "endpoints": [ { "url": ... }, { "url": ... }] }
 Document-Policy: ...; report-to main-endpoint

A v0 usa o cabeçalho Report-To para configurar grupos de endpoints nomeados e a diretiva report-to em outros cabeçalhos para referenciar esses grupos de endpoints.

v1 (nova)
 Reporting-Endpoints: main-endpoint="https://reports.example/main", default="https://reports.example/default"
 Document-Policy: ...; report-to main-endpoint

A v1 usa o cabeçalho Reporting-Endpoints para configurar endpoints nomeados. Como a v0, ela usa a diretiva report-to em outros cabeçalhos para referenciar esses grupos de endpoints.

  • O escopo do relatório é diferente.
v0 (legada)

Com a v0, é possível definir endpoints de relatórios apenas em algumas respostas. Outros documentos (páginas) nessa origem usariam automaticamente esses endpoints ambientais.

v1 (nova)

Com a v1, é necessário definir o cabeçalho Reporting-Endpoints em todas as respostas que possam gerar relatórios.

  • As duas APIs oferecem suporte aos mesmos tipos de relatório, com uma exceção: a v1 não oferece suporte a relatórios de erros de rede. Leia mais nas etapas de migração.
  • A v0 não é e não será compatível com vários navegadores. A v1 tem mais chances de ser compatível com vários navegadores no futuro.

O que permanece inalterado

  • O formato e a estrutura dos relatórios não mudaram.
  • A solicitação enviada pelo navegador ao endpoint continua sendo uma solicitação POST de Content-type application/reports+json.
  • O mapeamento de determinados endpoints para determinados tipos de relatório é compatível com as versões v0 e v1.
  • O papel do endpoint default não mudou.
  • A API Reporting v1 não tem impacto no ReportingObserver. O ReportingObserver continua tendo acesso a todos os relatórios observáveis, e o formato deles é idêntico.

Todas as diferenças entre a v0 e a v1

API Reporting legada (v0)
Report-To cabeçalho
Nova API Reporting (v1)
Reporting-Endpoints cabeçalho
Suporte ao navegador Chrome 69 e versões mais recentes e Edge 69 e versões mais recentes. Chrome 96 e versões mais recentes e Edge 96 e versões mais recentes. O Firefox oferece suporte. O Safari não se opõe. Consulte os indicadores do navegador.
Endpoints Envia relatórios para vários coletores de relatórios (vários URLs definidos por grupo de endpoints). Envia relatórios para coletores de relatórios específicos (apenas um URL definido por endpoint).
Superfície da API Usa o `Report-To` cabeçalho para configurar **grupos de endpoints** nomeados. Usa o cabeçalho `Reporting-Endpoints` para configurar endpoints nomeados.
Tipos de relatório que podem ser gerados por essa API
  • Suspensão de uso
  • Intervenção
  • Acidente
  • COOP/COEP
  • Política de Segurança de Conteúdo Nível 3 (CSP Nível 3)
  • Registro de erros de rede (NEL)
Saiba mais sobre os tipos de relatório no post da API Reporting.
Inalterado, exceto para registro de erros de rede (NEL): isso não é compatível na nova API Reporting (v1).
Escopo do relatório Origem.
O cabeçalho Report-To de um documento afeta outros documentos (páginas) dessa origem. O campo url de um relatório ainda varia por documento.
Documento.
O cabeçalho Reporting-Endpoints de um documento afeta apenas esse documento. O campo url de um relatório ainda varia por documento.
Isolamento de relatórios (lotes) Documentos (páginas) ou sites/origens diferentes que geram um relatório quase ao mesmo tempo e que têm o mesmo endpoint de relatório serão agrupados: eles serão enviados na mesma mensagem para o endpoint de relatório.
  • Relatórios de documentos (páginas) diferentes nunca são enviados juntos. Mesmo que dois documentos (páginas) da mesma origem gerem um relatório ao mesmo tempo, para o mesmo endpoint, eles não serão agrupados. Esse é um mecanismo para atenuar ataques de privacidade.
  • Relatórios do mesmo documento (página) podem ser enviados juntos.
Suporte para balanceamento de carga / prioridades Sim Não

Desenvolvedores de endpoints: espere mais tráfego

Se você configurou seu próprio servidor como um endpoint de relatório ou se está desenvolvendo ou mantendo um coletor de relatórios como um serviço, espere mais tráfego para esse endpoint.

Isso ocorre porque os relatórios não são agrupados com a API Reporting v1 como são com a API Reporting v0. Portanto, à medida que os desenvolvedores de aplicativos começam a migrar para a API Reporting v1, o número de relatórios vai permanecer semelhante, mas o volume de solicitações para o servidor de endpoint vai aumentar.

Desenvolvedores de aplicativos: migre para Reporting-Endpoints (v1)

O que você deve fazer?

O uso da nova API Reporting (v1) tem vários benefícios ✅:

  • Os indicadores do navegador são positivos, o que significa que o suporte entre navegadores pode ser esperado para a v1 (ao contrário da v0, que só é compatível com o Chrome e o Edge).
  • A API é mais enxuta.
  • As ferramentas estão sendo desenvolvidas na nova API Reporting (v1).

Com isso em mente:

  • Se o site já usa a API Reporting v0 com o Report-To cabeçalho, migre para a API Reporting v1 (consulte as etapas de migração). Se o site já usa a funcionalidade de relatórios para violações da Política de Segurança de Conteúdo, confira as etapas de migração específicas para relatórios de CSP.
  • Se o site ainda não usa a API Reporting e você está adicionando a funcionalidade de relatórios agora, use a nova API Reporting (v1) (o cabeçalho Reporting-Endpoints). Há uma exceção a isso: se você precisar usar o registro de erros de rede, use Report-To (v0). O registro de erros de rede não é compatível com a API Reporting v1. Um novo mecanismo para o registro de erros de rede será desenvolvido. Até que ele esteja disponível, use a API Reporting v0. Se você precisar do registro de erros de rede junto com outros tipos de relatório, use tanto Report-To (v0) quanto Reporting-Endpoints (v1). A v0 oferece o registro de erros de rede e a v1 oferece relatórios de todos os outros tipos.

Etapas da migração

Seu objetivo nessa migração é não perder os relatórios que você costumava receber com a v0.

  1. Etapa 1 (fazer agora): use os dois cabeçalhos: Report-To (v0) e Reporting-Endpoints (v1).

    Com isso, você terá:

    • Relatórios de clientes mais recentes do Chrome e do Edge graças ao Reporting-Endpoints (v1).
    • Relatórios de clientes mais antigos do Chrome e do Edge graças ao Report-To (v0).

    As instâncias do navegador que oferecem suporte a Reporting-Endpoints vão usar Reporting-Endpoints, e as instâncias que não oferecem suporte vão usar Report-To. O formato de solicitação e relatório é o mesmo para a v0 e a v1.

  2. Etapa 2 (fazer agora) : verifique se o cabeçalho Reporting-Endpoints está definido em todas as respostas que possam gerar relatórios.

    Com a v0, era possível definir endpoints de relatórios apenas em algumas respostas, e outros documentos (páginas) nessa origem usariam esse endpoint "ambiental". Com a v1, devido à diferença no escopo, é necessário definir o cabeçalho Reporting-Endpoints em todas as respostas que possam gerar relatórios.

  3. Etapa 3 (começar mais tarde) : depois que todos ou a maioria dos usuários tiverem atualizado para instalações mais recentes do Chrome ou do Edge (96 e versões mais recentes), remova Report-To (v0) e mantenha apenas Reporting-Endpoints.

    Uma exceção: se você precisar de relatórios de registro de erros de rede, mantenha Report-To até que um novo mecanismo seja implementado para o registro de erros de rede.

Consulte exemplos de código no manual de migração.

Etapas de migração para relatórios de CSP

Há duas maneiras de configurar relatórios de violação da Política de Segurança de Conteúdo:

  • Apenas com o cabeçalho CSP usando a diretiva report-uri. Isso tem amplo suporte ao navegador, no Chrome, Firefox, Safari e Edge. Os relatórios são enviados com o tipo de conteúdo application/csp-report e têm um formato específico para CSP. Esses relatórios são chamados de "Relatórios de CSP Nível 2" e não dependem da API Reporting.
  • Com a API Reporting, ou seja, pelo cabeçalho Report-To (legado) ou o mais recente Reporting-Endpoints (v1). Isso é compatível apenas com o Chrome e o Edge. As solicitações de relatório têm o mesmo formato que outras solicitações da API Reporting e o mesmo tipo de conteúdo application/reports+json.

O uso da primeira abordagem (apenas report-uri) não é mais recomendado e o uso da segunda abordagem tem alguns benefícios. Em particular, ele permite usar uma única maneira de configurar relatórios para todos os tipos de relatório, bem como definir um endpoint genérico, porque todas as solicitações de relatório geradas pela API Reporting (CSP e outras) têm o mesmo formato application/reports+json.

No entanto, apenas alguns navegadores oferecem suporte a report-to. Portanto, é recomendável manter report-uri junto com a abordagem da API Reporting (Report-To ou melhor, Reporting-Endpoints) para receber relatórios de violação de CSP de vários navegadores. Em um navegador que reconhece report-uri e report-to, report-uri será ignorado se report-to estiver presente. Em um navegador que reconhece apenas report-uri, apenas report-uri será considerado.

  1. Etapa 1 (fazer agora): se você ainda não adicionou, adicione report-to junto com report-uri. Os navegadores que oferecem suporte apenas a report-uri (Firefox) vão usar report-uri, e os navegadores que também oferecem suporte a report-to(Chrome, Edge) vão usar report-to. Para especificar os endpoints nomeados que você vai usar em report-to, use os cabeçalhos Report-To e Reporting-Endpoints. Isso garante que você receba relatórios de clientes mais antigos e mais recentes do Chrome e do Edge.

  2. Etapa 3 (começar mais tarde) : depois que todos ou a maioria dos usuários tiverem atualizado para instalações mais recentes do Chrome ou do Edge (96 e versões mais recentes), remova Report-To (v0) e mantenha apenas Reporting-Endpoints. Mantenha report-uri para continuar recebendo relatórios de navegadores que só oferecem suporte a ele.

Consulte exemplos de código para essas etapas na migração de relatórios de CSP.

Migração: exemplo de código

Visão geral

Se você estiver usando a API Reporting legada (v0) para receber relatórios de violação de um COOP (cabeçalho Cross-Origin-Opener-Policy), um COEP (Cross-Origin-Embedder-Policy) ou uma política de documento (cabeçalho Document-Policy), não será necessário mudar esses cabeçalhos de política ao migrar para a API Reporting v1. O que você precisa fazer é migrar do cabeçalho Report-To legado para o novo cabeçalho Reporting-Endpoints.

Se você estiver usando a API Reporting legada (v0) para receber relatórios de violação de um CSP (cabeçalho Content-Security-Policy), talvez seja necessário ajustar a Content-Security-Policy como parte da migração para a nova API Reporting (v1).

Migração básica

Código legado (com v0)
Report-To: { group: "main-endpoint", "endpoints": [ { "url": "https://reports.example/main" }] }, { group: "default-endpoint", "endpoints": [ { "url": "https://reports.example/default" }] }
Novo código (código de transição com v0 e v1)
Reporting-Endpoints: main-endpoint="https://reports.example/main", default="https://reports.example/default"
Report-To: { group: "main-endpoint", "max_age": 86400, "endpoints": [ { "url": "https://reports.example/main" }] }, { group: "default-endpoint", "max_age": 86400, "endpoints": [ { "url": "https://reports.example/default" }] }

Se você já tem a funcionalidade de relatórios no seu site, mantenha Report-To apenas temporariamente (até que a maioria dos clientes do Chrome e do Edge seja atualizada) para evitar a perda de relatórios.

Se você precisar do registro de erros de rede, mantenha Report-To até que a substituição do registro de erros de rede esteja disponível.

Novo código (apenas com v1)
Reporting-Endpoints: main-endpoint="https://reports.example/main", default="https://reports.example/default"

É assim que o código pode ficar no futuro, quando a maioria dos clientes do Chrome e do Edge tiver sido atualizada e oferecer suporte à API v1.

Com a v1, ainda é possível enviar tipos de relatório específicos para endpoints específicos. No entanto, só é possível ter um URL por endpoint.

Observar todas as páginas

Código legado (com v0), por exemplo, com o Express
app.get("/", (request, response) => {
  response.set("Report-To", )
  response.render(...)
});
app.get("/page1", (request, response) => {
  response.render(...)
});

Com a v0, é possível definir endpoints de relatórios apenas em algumas respostas. Outros documentos (páginas) nessa origem usam automaticamente esses endpoints ambientais. Aqui, os endpoints definidos para "/" são usados para todas as respostas, por exemplo, para page1.

Novo código (com v1), por exemplo, com o Express
// Use a middleware to set the reporting endpoint(s) for *all* requests.
app.use(function(request, response, next) {
  response.set("Reporting-Endpoints", );
  next();
});

app.get("/", (request, response) => {
  response.render(...)
});

app.get("/page1", (request, response) => {
  response.render(...)
});

Com a v1, é necessário definir o cabeçalho Reporting-Endpoints em todas as respostas que possam gerar relatórios.

Migração de relatórios de CSP

Código legado, apenas com report-uri
Content-Security-Policy: ...; report-uri https://reports.example/main

O uso de apenas report-uri não é mais recomendado. Se o código for semelhante ao acima, migre. Consulte os exemplos de novo código abaixo (em verde).

Código legado melhor, com report-uri e a diretiva report-to com o cabeçalho Report-To (v0)
Content-Security-Policy: ...; report-uri https://reports.example/main; report-to main-endpoint
Report-To: main-endpoint="https://reports.example/main"

Isso é melhor: esse código usa report-to, a substituição mais recente para report-uri. Ele ainda mantém o report-uri para compatibilidade com versões anteriores. Vários navegadores não oferecem suporte a report-to mas oferecem suporte a report-uri.

Ainda assim, isso poderia ser melhor: esse código usa a API Reporting v0 (cabeçalho Report-To). Migre para a v1: consulte os exemplos de "Novo código" abaixo (em verde).

Novo código, com report-uri e a diretiva report-to com o cabeçalho Reporting-Endpoints (v1)
Content-Security-Policy: ...; report-uri https://reports.example/main; report-to main-endpoint
Reporting-Endpoints: main-endpoint="https://reports.example/main"
Report-To: ...

Mantenha a diretiva report-uri junto com a diretiva report-to até que a diretiva report-to seja compatível com vários navegadores. Consulte a tabela de compatibilidade do navegador.

Mantenha Report-To junto com Reporting-Endpoints temporariamente. Depois que a maioria dos visitantes do Chrome e do Edge fizer upgrade para as versões 96 e mais recentes do navegador, remova Report-To.

Leitura adicional

Agradecemos a Ian Clelland, Eiji Kitamura e Milica Mihajlija pelas revisões e sugestões neste artigo.