Co to jest nagłówek http X-REQUEST-ID?

98

Dużo już googlowałem na ten temat, czytałem różne artykuły o tym nagłówku, jego zastosowaniu w Heroku i projektach opartych na Django.

Jednak w mojej głowie wciąż jest to zdezorientowane.

  • Jaki jest cel tego nagłówka?
  • Czy narusza prywatność użytkownika?
  • Czy może pomóc w śledzeniu użytkownika?
Stephan
źródło
1
@Wrikken Już to zrobiłem ... i nadal jestem zdezorientowany co do tego nagłówka.
Stephan
Następnie, aby (1) skorelować zapytanie internetowe z żądaniem przesłanym do Twojej aplikacji (2) Nie, ponieważ użytkownik go nie wysyła, router ustawia to (3) Patrz (2), ale może to pomóc w śledzeniu indywidualnego żądania podczas debugowania.
Wrikken

Odpowiedzi:

174

Podczas korzystania z usługi sieciowej, do której mają dostęp klienci, może być trudno skorelować żądania (które klient może zobaczyć) z dziennikami serwera (które serwer może zobaczyć).

Pomysł X-Request-IDpolega na tym, że klient może utworzyć losowy identyfikator i przekazać go do serwera. Serwer następnie dołącza ten identyfikator do każdej tworzonej instrukcji dziennika. Jeśli klient otrzyma błąd, może dołączyć identyfikator do raportu o błędzie, umożliwiając operatorowi serwera wyszukanie odpowiednich instrukcji dziennika (bez konieczności polegania na sygnaturach czasowych, adresach IP itp.).

Ponieważ ten identyfikator jest generowany (losowo) przez klienta, nie zawiera żadnych poufnych informacji, a zatem nie powinien naruszać prywatności użytkownika. Ponieważ unikalny identyfikator jest tworzony na żądanie, nie pomaga również w śledzeniu użytkowników.

Stefan Kögl
źródło
@Wrikken wspomina w swoim komentarzu, że identyfikator został ustawiony przez router, a tutaj jego klientów. Kim są klienci?
Stephan
4
Klient to oprogramowanie, które wysyła żądanie do serwera, może to być przeglądarka lub narzędzie do testów warunków skrajnych, takie jak JMeter. Serwer może również wygenerować identyfikator żądania, jeśli nie został dostarczony przez oryginalnego klienta, i przekazać go innym serwerom w dalszej kolejności, np. Serwer WWW generuje identyfikator i przekazuje go do serwera aplikacji.
isapir
1
Blog Heroku deklaruje, że X-Request-ID pomaga skorelować wiele wpisów dziennika z pojedynczymi żądaniami HTTP (s): blog.heroku.com/…
Stephan,
4
Jest również znany jako CorrelationId i nie jest standardowym nagłówkiem HTTP: en.wikipedia.org/wiki/List_of_HTTP_header_fields X-Request-ID, X-Correlation-ID. Koreluje żądania HTTP między klientem a serwerem.
Major
jeśli każde żądanie wiąże się z sesją użytkownika, czy nadal konieczne jest dołączenie X-Request-ID?
Jerry Chin
14

Cel: Idempotencja

Z identyfikatorem, który zmienia się dla każdego żądania, ale pozostaje taki sam w przypadku ponownej próby żądania, odbiorca może zapewnić, że żądanie nie zostanie przetworzone więcej niż raz.

Oto cytat od pewnego dostawcy API:

Wszystkie żądania HTTP POST, PUT i PATCH powinny zawierać unikalny nagłówek X-Request-Id, który jest używany do zapewnienia idempotentnego przetwarzania wiadomości w przypadku ponownej próby

Jeśli utworzysz losowy ciąg, niepowtarzalny na żądanie , nie naruszy to Twojej prywatności ani nie umożliwi śledzenia.

Jeśli chcesz dowiedzieć się więcej o tym, co ma do zaoferowania idempotencja, przeczytaj ten wnikliwy artykuł .

NB Jak komentuje Stefan Kögl, ten nagłówek nie jest ustandaryzowany - stąd (przestarzały) przedrostek „X-”.

Evgeniy Berezovsky
źródło
5
Należy pamiętać, że chociaż „jakiś dostawca API” może używać nagłówka X-Request-Id w ten sposób, nie jest to standardowe zachowanie. Zasadniczo nie można go używać do tego celu.
Stefan Kögl,
Kolejny prosty fragment: restapitutorial.com/lessons/idempotency.html
JayRizzo
1

Wyjaśnienie za pomocą opowieści / analogii

Twój internet gra (jak zwykle), więc dzwonisz do Tellstra i czekasz na telefon bez końca…… w końcu poddajesz się i z frustracji zatrzaskujesz telefon. (To połączenie nie powiodło się. W dziennikach połączeń Tellstra znajduje się jego zapis).

„To wszystko, dzwonię do Rzecznika Praw Obywatelskich!”

Ale Obmudsman ma do przejrzenia tysiące zapisów rozmów (wszystkie nieudane zapytania Tellstra). Jeśli powiesz im, że zadzwoniłeś do Telstra i że rozmowa się nie powiodła, to nie wystarczy: skąd Rzecznik Praw Obywatelskich dowie się ze wszystkich zapisów rozmów Tellstra, która z nich była Twoja - aby można było dalej zbadać sprawę? ?

Tutaj pojawia się X-Request-ID - kiedy dzwonisz do Tellstra, podajesz losowy numer (X-Request-ID) i jest to rejestrowane w rekordach Tellstra. W ten sposób rzecznik praw obywatelskich (mając dostęp do wszystkich zapisów) będzie mógł znaleźć Twoje połączenie przychodzące, aby dowiedzieć się, co poszło nie tak.

Zastosowanie historii do HTTP

To samo dotyczy żądań http - jest to identyfikator, który pomaga Ci (jako deweloperowi zaplecza) dowiedzieć się, co poszło nie tak, gdy klient zgłasza błąd lub duży raport.

To podstawowe podsumowanie tego. Wszelkie pytania itp. Po prostu opublikuj komentarz i mam nadzieję, że to wyjaśnię.

BKSpurgeon
źródło
1
Moim zdaniem ta „analogia” dodaje raczej zamieszania niż jasności. W przypadku rozmowy telefonicznej nie ma możliwości przekazania losowej liczby, która zostanie automatycznie zarejestrowana przez odbiorcę, a co za tym idzie, Twoja historia jest bezsensowna.
Mark Amery
-12

Ten nagłówek żądania może służyć do synchronizacji. Załóżmy, że utworzyłeś listę rzeczy do zrobienia, która umożliwia korzystanie z trybu offline. Twój użytkownik tworzy 3 elementy i każdemu z nich nadawany jest unikalny identyfikator UUID w aplikacji offline. Gdy połączenie sieciowe jest dostępne, rekordy są wysyłane do serwera POST i zwracane są odpowiadające im identyfikatory wygenerowane automatycznie z bazy danych. Następnie możesz zamienić identyfikatory w swojej aplikacji (np. Atrybut „id” elementu HTML „li”).

Mark Png
źródło
5
Opisany tutaj scenariusz nie oznacza użycia nagłówka HTTP do transportu identyfikatora UUID.
Stephan