O que é o cabeçalho http X-REQUEST-ID?

98

Já pesquisei muito sobre esse assunto, li vários artigos sobre esse cabeçalho, seu uso no Heroku e projetos baseados em Django.

No entanto, ainda está tudo confuso na minha cabeça.

  • Qual é o propósito deste cabeçalho?
  • Isso viola a privacidade do usuário?
  • Isso pode ajudar a rastrear um usuário?
Stephan
fonte
1
@Wrikken Eu já fiz isso ... e ainda estou confuso sobre esse cabeçalho.
Stephan
Então, para (1) corrolar um webrequest com o pedido encaminhado para a sua aplicação (2) Não, porque o usuário não envia, o roteador configura (3) Veja (2), mas pode ajudar a rastrear individual solicitações durante a depuração.
Wrikken

Respostas:

174

Quando você está operando um serviço da Web que é acessado por clientes, pode ser difícil correlacionar solicitações (que um cliente pode ver) com logs do servidor (que o servidor pode ver).

A ideia do X-Request-ID é que um cliente pode criar algum ID aleatório e passá-lo para o servidor. O servidor então inclui esse ID em cada instrução de log que ele cria. Se um cliente receber um erro, ele pode incluir o ID em um relatório de bug, permitindo ao operador do servidor consultar as declarações de log correspondentes (sem ter que depender de carimbos de data / hora, IPs, etc.).

Como este ID é gerado (aleatoriamente) pelo cliente, ele não contém nenhuma informação sensível e, portanto, não deve violar a privacidade do usuário. Como um ID exclusivo é criado por solicitação, ele também não ajuda no rastreamento de usuários.

Stefan Kögl
fonte
@Wrikken menciona em seu comentário que o ID foi definido por um roteador e aqui seus clientes. O que são clientes?
Stephan
4
Um cliente é o software que envia a solicitação ao servidor, pode ser um navegador ou uma ferramenta de teste de estresse como o JMeter. Além disso, o servidor pode gerar o Id de Solicitação, se não for fornecido pelo cliente original, e passá-lo para outros servidores na linha, por exemplo, o servidor da web gera o id e o encaminha para o servidor de aplicativos.
isapir
1
O blog do Heroku declara que o X-Request-ID ajuda a correlacionar várias entradas de registro a solicitações HTTP (s) individuais: blog.heroku.com/…
Stephan
4
Também conhecido como CorrelationId e não um cabeçalho HTTP padrão: en.wikipedia.org/wiki/List_of_HTTP_header_fields X-Request-ID, X-Correlation-ID. Correlaciona solicitações HTTP entre um cliente e servidor.
Maior
se cada solicitação vier com a sessão do usuário, ainda é necessário anexar X-Request-ID?
Jerry Chin
14

Objetivo: Idempotência

Com um ID que muda para cada solicitação, mas permanece o mesmo no caso de uma nova tentativa de uma solicitação, o receptor pode garantir que a solicitação não seja processada mais de uma vez.

Esta é uma citação de algum provedor de API:

Todas as solicitações POST, PUT e PATCH HTTP devem conter um cabeçalho X-Request-Id exclusivo que é usado para garantir o processamento idempotente de mensagens em caso de nova tentativa

Se você torná-lo uma string aleatória, única por solicitação , não infringirá sua privacidade, nem permitirá o rastreamento.

Se você quiser saber mais sobre o que a idempotência tem a oferecer, leia este artigo perspicaz .

NB Como Stefan Kögl comenta, este cabeçalho não é padronizado - daí o prefixo "X-" (obsoleto).

Evgeniy Berezovsky
fonte
5
Observe que, embora "algum provedor de API" possa usar o cabeçalho X-Request-Id dessa forma, esse não é o comportamento padrão. Geralmente, não pode ser usado para este propósito.
Stefan Kögl
Outro snippet simples: restapitutorial.com/lessons/idempotency.html
JayRizzo
1

Explicação usando uma história / analogia

Sua internet está funcionando (como sempre), então você liga para Tellstra e fica esperando no telefone para sempre ... finalmente você desiste e bate o telefone em frustração. (Esta é uma chamada falhada. E há um registro disso nos registros de chamadas de Tellstra.)

"É isso, vou ligar para o Provedor de Justiça!"

Mas o Obmudsman tem milhares de registros de chamadas para examinar (todas as consultas que falharam em Tellstra). Se você disser que ligou para a Telstra e que sua ligação não teve sucesso, não será suficiente: como a Ouvidoria saberá, de todos os registros de ligações de Tellstra, qual era a sua - para que possa ser investigada? ?

É aí que entra o X-Request-ID - sempre que você liga para a Tellstra, você passa um número aleatório (o X-Request-ID) e isso é registrado nos registros da Tellstra. Dessa forma, a ouvidoria (tendo acesso a todos os registros) poderá localizar sua ligação para saber o que deu errado.

Aplicação da história ao HTTP

O mesmo se aplica a solicitações http - é um id usado para ajudá-lo (como o desenvolvedor de back-end) a descobrir o que deu errado quando um cliente lhe envia um erro ou um grande relatório.

Esse é o resumo básico disso. Qualquer dúvida, etc., basta postar um comentário e espero esclarecê-lo.

BKSpurgeon
fonte
1
A "analogia" aqui adiciona confusão, ao invés de clareza, na minha opinião. No caso de uma ligação telefônica, não há como passar um número aleatório que é registrado automaticamente pelo destinatário e, conseqüentemente, sua história não faz sentido.
Mark Amery
-12

Este cabeçalho de solicitação pode ser usado para sincronização. Digamos que você construiu uma lista de tarefas pendentes que oferece capacidade offline. Seu usuário cria 3 itens e cada um deles recebe um UUID exclusivo no aplicativo offline. Quando a conectividade de rede está disponível, os registros são postados no servidor e os IDs correspondentes gerados automaticamente a partir do banco de dados são retornados. Você pode então substituir os IDs em seu aplicativo (por exemplo, atributo "id" do elemento HTML "li").

Mark Png
fonte
4
O cenário descrito aqui não implica o uso de um cabeçalho HTTP para transportar o UUID.
Stephan