Що таке заголовок http-X-REQUEST-ID?


97

Я вже багато гуглив цю тему, читав різні статті про цей заголовок, його використання в Heroku та проекти, засновані на Django.

Однак у мене все це все плутається в голові.

  • Яка мета цього заголовка?
  • Це порушує конфіденційність користувачів?
  • Чи може це допомогти відстежити користувача?

1
@Wrikken Я це вже зробив ... і досі мене бентежить цей заголовок.
Stephan

Потім, щоб (1) підтвердити веб-запит із запитом, пересланим до вашої програми (2) Ні, оскільки користувач не надсилає його, маршрутизатор встановлює його (3) Див. (2), але це може допомогти відстежувати окремих запити під час налагодження.
Wrikken

Відповіді:


171

Коли ви працюєте з веб-службою, до якої отримують доступ клієнти, може бути важко співвіднести запити (які клієнт може бачити) з журналами сервера (які може бачити сервер).

Ідея X-Request-IDполягає в тому, що клієнт може створити якийсь випадковий ідентифікатор і передати його серверу. Потім сервер включає цей ідентифікатор до кожного оператора журналу, який він створює. Якщо клієнт отримує помилку, він може включити ідентифікатор у звіт про помилку, що дозволяє оператору сервера шукати відповідні оператори журналу (без необхідності покладатися на мітки часу, IP-адреси тощо).

Оскільки цей ідентифікатор генерується (випадковим чином) клієнтом, він не містить жодної конфіденційної інформації, і, отже, не повинен порушувати конфіденційність користувача. Оскільки унікальний ідентифікатор створюється на запит, він також не допомагає відстежувати користувачів.


@Wrikken згадує у своєму коментарі, що ідентифікатор встановив маршрутизатор, а тут - його клієнти. Що таке клієнти?
Стефан

4
Клієнт - це програмне забезпечення, яке надсилає запит на сервер, це може бути браузер або інструмент для стрес-тестування, такий як JMeter. Також сервер може генерувати ідентифікатор запиту, якщо його не надає оригінальний клієнт, та передавати його іншим серверам, наприклад, веб-сервер генерує ідентифікатор та пересилає його на сервер додатків.
isapir

1
Блог Heroku заявляє, що X-Request-ID допомагає співвідносити декілька записів журналу з окремими запитами HTTP: blog.heroku.com/…
Стефан,

4
Він також відомий як CorrelationId, а не стандартний заголовок HTTP: en.wikipedia.org/wiki/List_of_HTTP_header_fields X-Request-ID, X-Correlation-ID. Співвідносить запити HTTP між клієнтом і сервером.
Майор

якщо кожен запит приходить із сеансом користувача, чи потрібно все-таки додавати X-Request-ID?
Джеррі Чін

14

Призначення: Ідемпотентність

Ідентифікатор, який змінюється для кожного запиту, але залишається незмінним у разі повторної спроби запиту, одержувач може гарантувати, що запит не буде оброблений більше одного разу.

Це цитата від деякого постачальника API:

Усі запити HTTP POST, PUT та PATCH повинні містити унікальний заголовок X-Request-Id, який використовується для забезпечення обробки ідемпотентних повідомлень у випадку повторної спроби

Якщо ви зробите це випадковим рядком, унікальним для кожного запиту , це не буде порушувати вашу конфіденційність, а також увімкнути відстеження.

Якщо ви хочете дізнатись більше про те, що може запропонувати ідемпотентність, прочитайте цю глибоку статтю .

Примітка. Як коментує Стефан Кегль, цей заголовок не стандартизований - звідси (застарілий) префікс "X-".


5
Зверніть увагу, що хоча "деякий постачальник API" може використовувати заголовок X-Request-Id таким чином, це не є стандартною поведінкою. Зазвичай його не можна використовувати для цієї мети.
Штефан

Ще один простий фрагмент: restapitutorial.com/lessons/idempotency.html
JayRizzo

1

Пояснення з використанням історії / аналогії

Ваш Інтернет відтворюється (як зазвичай), тому ви телефонуєте Телстрі і чекаєте на телефон назавжди ...... нарешті ви здаєтеся і розчаровано ляпаєте телефон. (Це невдалий дзвінок. І про це є запис у журналах викликів Tellstra.)

"Ось і все, я телефоную до омбудсмена!"

Але Омбудсмен має пройти тисячі записів дзвінків (усі невдалі запити Tellstra). Якщо ви скажете їм, що ви зателефонували в Telstra, і що ваш дзвінок був невдалим, цього буде недостатньо: звідки Омбудсмен буде знати з усіх записів викликів Tellstra, який з них був вашим, - щоб його можна було розслідувати далі? ?

Ось тут і з’являється X-Request-ID - коли ви коли-небудь телефонуєте Tellstra, ви передаєте випадкове число (X-Request-ID), і це реєструється в записах Tellstra. Таким чином, омбудсмен (маючи доступ до всіх записів) зможе знайти ваш вхідний дзвінок, щоб з’ясувати, що пішло не так.

Застосування історії до HTTP

Те саме стосується запитів http - це ідентифікатор, який використовується для того, щоб допомогти вам (як розробнику на задній панелі) дізнатися, що пішло не так, коли клієнт видає вам помилку або великий звіт.

Це основний підсумок цього. Будь-які питання тощо просто залиште коментар, і я сподіваюся це прояснити.


1
На мій погляд, "аналогія" додає сум'яття, а не ясності. У разі телефонного дзвінка немає можливості передати випадковий номер, який отримувач автоматично реєструє, і, отже, ваша історія безглузда.
Mark Amery

-12

Цей заголовок запиту може бути використаний для синхронізації. Скажімо, ви створили список завдань, який пропонує можливості роботи в автономному режимі. Ваш користувач створює 3 елементи, і кожному з них надається унікальний UUID в автономному додатку. Коли доступне мережеве підключення, записи ПЕРЕДАЧУЮТЬСЯ на сервер і повертають відповідні ідентифікатори, автоматично сформовані з бази даних. Потім ви можете замінити ідентифікатори у вашому додатку (наприклад, атрибут "id" елемента HTML "li").


4
Описаний тут сценарій не передбачає використання заголовка HTTP для транспортування UUID.
Stephan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.