¿Qué es el encabezado http X-REQUEST-ID?

97

Ya busqué en Google mucho este tema, leí varios artículos sobre este encabezado, su uso en Heroku y proyectos basados ​​en Django.

Sin embargo, todavía está todo confuso en mi cabeza.

  • ¿Cuál es el propósito de este encabezado?
  • ¿Viola la privacidad del usuario?
  • ¿Puede ayudar a rastrear a un usuario?
Stephan
fuente
1
@Wrikken Ya hice eso ... y todavía estoy confundido acerca de este encabezado.
Stephan
Luego, para (1) corroborar una webrequest con la solicitud reenviada a su aplicación (2) No, debido a que el usuario no la envía, el enrutador la configura (3) Ver (2), pero podría ayudar a rastrear individuos solicitudes durante la depuración.
Wrikken

Respuestas:

170

Cuando opera un servicio web al que acceden los clientes, puede resultar difícil correlacionar las solicitudes (que un cliente puede ver) con los registros del servidor (que el servidor puede ver).

La idea X-Request-IDes que un cliente puede crear una identificación aleatoria y pasarla al servidor. Luego, el servidor incluye ese ID en cada declaración de registro que crea. Si un cliente recibe un error, puede incluir la ID en un informe de error, lo que permite al operador del servidor buscar las declaraciones de registro correspondientes (sin tener que depender de marcas de tiempo, IP, etc.).

Como esta identificación es generada (aleatoriamente) por el cliente, no contiene ninguna información sensible y, por lo tanto, no debe violar la privacidad del usuario. Como se crea una identificación única por solicitud, tampoco ayuda con el seguimiento de los usuarios.

Stefan Kögl
fuente
@Wrikken menciona en su comentario que la ID fue establecida por un enrutador y aquí sus clientes. ¿Qué son los clientes?
Stephan
4
Un cliente es el software que envía la solicitud al servidor, podría ser un navegador o una herramienta de prueba de esfuerzo como JMeter. Además, el servidor puede generar el Id. De solicitud si el cliente original no lo proporciona, y pasarlo a otros servidores en el futuro, por ejemplo, el servidor web genera el Id y lo reenvía al servidor de aplicaciones.
isapir
1
El blog de Heroku declara que X-Request-ID ayuda a correlacionar múltiples entradas de registro con solicitudes HTTP individuales: blog.heroku.com/…
Stephan
4
También se conoce como CorrelationId y no es un encabezado HTTP estándar: en.wikipedia.org/wiki/List_of_HTTP_header_fields X-Request-ID, X-Correlation-ID. Correlaciona las solicitudes HTTP entre un cliente y un servidor.
Mayor
si cada solicitud viene con una sesión de usuario, ¿es necesario adjuntar X-Request-ID?
Jerry Chin
14

Propósito: idempotencia

Con un ID que cambia para cada solicitud, pero que permanece igual en caso de que se vuelva a intentar una solicitud, el receptor puede asegurarse de que la solicitud no se procese más de una vez.

Esta es una cita de algún proveedor de API:

Todas las solicitudes HTTP POST, PUT y PATCH deben contener un encabezado X-Request-Id único que se utiliza para garantizar el procesamiento de mensajes idempotentes en caso de un reintento

Si lo convierte en una cadena aleatoria, única por solicitud , no infringirá su privacidad ni permitirá el seguimiento.

Si desea saber más de lo que la idempotencia tiene para ofrecer, lea este artículo revelador .

NB Como comenta Stefan Kögl, este encabezado no está estandarizado, de ahí el prefijo "X-" (obsoleto).

Evgeniy Berezovsky
fuente
5
Tenga en cuenta que, si bien "algún proveedor de API" puede usar el encabezado X-Request-Id de esta manera, este no es un comportamiento estándar. Generalmente no se puede utilizar para este propósito.
Stefan Kögl
Otro fragmento
JayRizzo
1

Explicación usando una historia / analogía

Tu Internet está funcionando (como de costumbre), así que llamas a Tellstra y estás esperando en el teléfono para siempre ... finalmente te rindes y cierras el teléfono con frustración. (Esta es una llamada fallida. Y hay un registro de ella en los registros de llamadas de Tellstra).

"¡Eso es, estoy llamando al Defensor del Pueblo!"

Pero el Obmudsman tiene miles de registros de llamadas que revisar (todas las consultas fallidas de Tellstra). Si les dice que llamó a Telstra y que su llamada no tuvo éxito, eso no será suficiente: ¿cómo sabrá el Defensor del Pueblo, de todos los registros de llamadas de Tellstra, cuál era el suyo, para que se pueda investigar más a fondo? ?

Ahí es donde entra X-Request-ID: cada vez que llama a Tellstra, pasa un número aleatorio (el X-Request-ID) y esto se registra en los registros de Tellstra. De esa manera, el ombudsman (que tiene acceso a todos los registros) podrá encontrar su llamada entrante para averiguar qué salió mal.

Aplicación de historia a HTTP

Lo mismo se aplica a las solicitudes http: es una identificación que se usa para ayudarlo (como desarrollador de back-end) a descubrir qué salió mal cuando un cliente le emite un error o un informe grande.

Ese es el resumen básico de la misma. Cualquier pregunta, etc., solo publique un comentario y espero aclararlo.

BKSpurgeon
fuente
1
La "analogía" aquí agrega confusión, más que claridad, en mi opinión. En el caso de una llamada telefónica, no hay forma de transmitir un número aleatorio que el destinatario registra automáticamente y, en consecuencia, su historia no tiene sentido.
Mark Amery
-12

Este encabezado de solicitud se puede utilizar para la sincronización. Supongamos que ha creado una lista de tareas pendientes que ofrece capacidad sin conexión. Su usuario crea 3 elementos y cada uno de ellos recibe un UUID único en la aplicación fuera de línea. Cuando la conectividad de la red está disponible, los registros se envían por POST al servidor y se devuelven los ID correspondientes generados automáticamente a partir de la base de datos. A continuación, puede reemplazar los ID en su aplicación (por ejemplo, el atributo "id" del elemento HTML "li").

Marcos Png
fuente
4
El escenario descrito aquí no implica el uso de un encabezado HTTP para transportar el UUID.
Stephan