Alguém lhe pede um ficheiro HAR. Normalmente é o suporte, ou um programador a olhar para um erro que reportou, e quase sempre o pedido chega com instruções que partem do princípio de que já sabe o que isso é.

Um ficheiro HAR é a gravação de todos os pedidos que o navegador fez enquanto estava a fazer alguma coisa, guardada num único ficheiro. HAR quer dizer HTTP Archive. É um ficheiro JSON simples que lista cada pedido que a página enviou, o que veio de volta, quanto tempo cada um demorou e por que ordem: o separador Rede das ferramentas de programador do seu navegador, posto por escrito e entregue.

O que está lá dentro

Para cada pedido que a página fez enquanto gravava:

  • O pedido: método, URL completo, cabeçalhos, query string e o corpo, se existia
  • A resposta: código de estado, cabeçalhos, tipo de conteúdo, tamanho e muitas vezes o corpo
  • Os tempos: quanto o pedido esperou, demorou a ligar, a enviar e a receber o primeiro byte
  • Quando aconteceu, de forma que a ordem e os intervalos entre pedidos se mantêm

É esta última parte que torna um HAR mais útil do que uma captura de ecrã do separador Rede. Uma captura mostra-lhe uma lista; um HAR deixa alguém repetir a sequência e ver que a renovação do token só arrancou depois do pedido que precisava dela.

Quando lho pedem

Quase sempre porque o problema é invisível de fora e acontece só consigo.

  • Uma página carrega para si e não para eles, ou ao contrário
  • Alguma coisa falha em silêncio, sem que a interface o diga
  • Um pedido está lento e ninguém sabe dizer se é a rede, o servidor ou o navegador
  • Uma integração devolve um erro só em produção, e só para uma conta

Em todos estes casos a resposta costuma ser uma linha num ficheiro para o qual ninguém olhou: um 403 onde se esperava um 200, um pedido que nunca chegou a sair, um ciclo de redirecionamentos, um erro de CORS que a página engoliu.

Como gravar um

Chrome ou Edge. Abra as ferramentas de programador com F12, ou Cmd + Option + I num Mac. Vá ao separador Rede. Marque Preservar registo para que um redirecionamento não apague o que já gravou. Reproduza o problema. Depois clique com o botão direito em qualquer linha da lista e escolha Guardar tudo como HAR com conteúdo.

Firefox. Ferramentas de programador, separador Rede, reproduza, e depois clique com o botão direito numa linha e escolha Guardar tudo como HAR.

Safari. Ative o menu Programar nas definições, depois Programar, Mostrar Inspetor Web, Rede e Exportar.

Duas coisas que escapam a toda a gente. Comece a gravar antes daquilo que quer demonstrar, porque o separador Rede só guarda o que viu. E reproduza o problema uma vez e pare: um HAR com onze minutos de cliques é um ficheiro que ninguém vai ler.

Ler um sem ferramenta nenhuma

A entrada mais rápida é abrir o ficheiro no próprio separador Rede de um navegador: arraste o HAR para cima do painel Rede e ele carrega como se o tivesse gravado, com ordenação e filtros.

O que olhar, mais ou menos por esta ordem:

Isto não primeiro
Percorrer a lista inteira à procura de alguma coisa que pareça errada
Isto primeiro
Filtrar por estado 400 para cima, depois pelos poucos pedidos mais lentos, e depois ver o que aconteceu mesmo antes da falha

Um HAR é JSON, por isso o jq também funciona com ele: jq '.log.entries[] | select(.response.status >= 400) | {url: .request.url, status: .response.status}' capture.har dá-lhe as falhas numa linha.

Um HAR só guarda pedidos que o navegador fez. Para inspecionar um que o seu próprio código envia, aponte-o ao endpoint de teste de webhooks, que lhe dá um URL e mostra o método, os cabeçalhos, a query string e o corpo do que lá chegar.

A parte de que ninguém o avisa

Um ficheiro HAR contém quase sempre credenciais. É a coisa mais importante a saber sobre ele, e as instruções que lhe mandam raramente a mencionam.

Guardado com conteúdo, um HAR leva todos os cabeçalhos de pedido, ou seja cookies de sessão e tokens de autorização, e todos os corpos de resposta, que podem incluir dados pessoais de quem estava autenticado. Quem tiver o ficheiro consegue muitas vezes agir como esse utilizador até esses tokens expirarem.

Por isso:

  • Trate um HAR como uma palavra-passe. Não o cole num gestor de erros público, num canal partilhado ou numa cadeia de email que vai ser reencaminhada.
  • Limpe-o antes de o partilhar, se conseguir. Algumas ferramentas retiram os cookies e os cabeçalhos de autorização; senão, abra o JSON e retire-os à mão.
  • Grave numa janela privada com uma conta de teste quando o problema o permitir, o que mantém dados reais de clientes inteiramente fora do ficheiro.
  • Apague-o depois. É prova de uma investigação, não um documento.

Se for você a pedir um HAR, diga tudo isto no pedido. A maior parte das pessoas que lhe manda um com o token de sessão ativo nunca ouviu ninguém dizer-lhe que não o fizesse.

Conseguir um sem as instruções

Tudo o que está acima são quatro parágrafos de instruções para alguém que só quer avisar que uma página está partida, e é por isso que os ficheiros HAR tantas vezes não chegam sequer a aparecer.

Session Replay

Extensão gratuita do Chrome. Um clique na página que se está a portar mal captura a captura de ecrã, a consola e o registo de rede, e devolve-lhe um link para colar no ticket.

Instalar a extensão

O registo de rede que captura inclui um ficheiro HAR que pode transferir e abrir nas ferramentas de programador, por isso quem pega no relatório fica com o mesmo ficheiro que teria pedido, sem ter tido de o pedir. O que não faz é decidir por si o que há a ocultar: o aviso acima continua a valer para tudo o que partilhar.

Para tudo o que rodeia o ficheiro - o que esperava, o que aconteceu e de que build se tratava - o guia do relatório de erro tem o modelo.