X-REQUEST-ID http başlığı nedir?


97

Bu konuyu zaten Google'da araştırdım, bu başlık, Heroku'daki kullanımı ve Django'ya dayalı projeler hakkında çeşitli makaleler okudum.

Ancak yine de kafamda hepsi karışık.

  • Bu başlığın amacı nedir?
  • Kullanıcı gizliliğini ihlal ediyor mu?
  • Bir kullanıcıyı takip etmeye yardımcı olabilir mi?

1
@Wrikken Bunu zaten yaptım ... ve bu başlık hakkında hala kafam karışık.
Stephan

Daha sonra, (1) bir web talebini uygulamanıza iletilen istekle ilişkilendirmek için (2) Hayır, kullanıcı göndermediğinden, yönlendirici ayarlıyor (3) Bkz. (2), ancak bireysel hata ayıklama sırasında istekler.
Wrikken

Yanıtlar:


170

İstemciler tarafından erişilen bir web hizmetini çalıştırırken, istekleri (bir istemcinin görebileceği) sunucu günlükleriyle (sunucunun görebileceği) ilişkilendirmek zor olabilir.

Buradaki fikir, X-Request-IDbir müşterinin rastgele bir kimlik oluşturup bunu sunucuya iletebilmesidir. Sunucu daha sonra bu kimliği oluşturduğu her günlük ifadesine ekler. Bir istemci bir hata alırsa, kimliği bir hata raporuna ekleyerek sunucu operatörünün karşılık gelen günlük ifadelerine bakmasına izin verebilir (zaman damgalarına, IP'lere vb. Güvenmek zorunda kalmadan).

Bu kimlik müşteri tarafından (rastgele) oluşturulduğundan, herhangi bir hassas bilgi içermez ve bu nedenle kullanıcının gizliliğini ihlal etmemelidir. Benzersiz bir kimlik istek başına oluşturulduğundan, kullanıcıların izlenmesine de yardımcı olmaz.


@Wrikken yorumunda kimliğin bir yönlendirici ve burada müşterileri tarafından belirlendiğinden bahsediyor. Müşteriler nedir?
Stephan

4
İstemci, isteği sunucuya gönderen yazılımdır, bir tarayıcı veya JMeter gibi bir stres testi aracı olabilir. Ayrıca, sunucu, orijinal istemci tarafından sağlanmadığında İstek Kimliği'ni oluşturabilir ve bunu diğer sunuculara iletebilir, örneğin web sunucusu kimliği oluşturur ve bunu uygulama sunucusuna iletir.
isapir

1
Heroku blogu, X-Request-ID'nin birden çok günlük girişini ayrı HTTP (ler) istekleriyle ilişkilendirmeye yardımcı olduğunu bildiriyor
Stephan

4
CorrelationId olarak da bilinir ve standart bir HTTP başlığı değildir: en.wikipedia.org/wiki/List_of_HTTP_header_fields X-Request-ID, X-Correlation-ID. Bir istemci ve sunucu arasındaki HTTP isteklerini ilişkilendirir.
Büyük

her istek kullanıcı oturumuyla birlikte gelirse, yine de X-Request-ID eklemek gerekli midir?
Jerry Chin

14

Amaç: Idempotency

Her istek için değişen ancak bir talebin yeniden denenmesi durumunda aynı kalan bir kimlik ile alıcı, isteğin birden fazla işleme alınmamasını sağlayabilir.

Bu, bazı API sağlayıcılarından bir alıntıdır:

Tüm POST, PUT ve PATCH HTTP istekleri, yeniden deneme durumunda idempotent mesaj işlemesini sağlamak için kullanılan benzersiz bir X-Request-Id başlığı içermelidir.

Rastgele bir dizeyi istek başına benzersiz yaparsanız , gizliliğinizi ihlal etmez veya izlemeyi etkinleştirmez.

İdempotency'nin neler sunabileceği hakkında daha fazla bilgi edinmek istiyorsanız, bu anlayışlı makaleyi okuyun .

NB Stefan Kögl'ün dediği gibi, bu başlık standartlaştırılmamıştır - bu nedenle (kullanımdan kaldırılmıştır) "X-" önekidir.


5
Lütfen "bazı API sağlayıcılarının" X-Request-Id başlığını bu şekilde kullanabileceğini ancak bunun standart bir davranış olmadığını unutmayın. Genelde bu amaçla kullanılamaz.
Stefan Kögl

Başka Bir Basit Metin
JayRizzo

1

Bir hikaye / benzetme kullanarak açıklama

İnternetiniz çalıyor (her zamanki gibi), bu yüzden Tellstra'yı ararsınız ve sonsuza kadar telefonda bekliyorsunuz ...... sonunda pes ediyor ve hayal kırıklığı içinde telefonu kapatıyorsunuz. (Bu başarısız bir aramadır ve Tellstra'nın arama günlüklerinde bunun bir kaydı vardır.)

"İşte bu, Ombudsman'ı arıyorum!"

Ancak Obmudsman'ın geçmesi gereken binlerce çağrı kaydı vardır (Tellstra'nın tüm başarısız sorguları). Onlara Telstra'yı aradığınızı ve aramanızın başarısız olduğunu söylerseniz, bu yeterli olmayacaktır : Ombudsman, Tellstra'nın tüm arama kayıtlarından hangisinin size ait olduğunu - daha fazla araştırılabilmesi için nasıl bilecek? ?

X-Request-ID'nin geldiği yer burasıdır - Tellstra'yı her aradığınızda, rastgele bir numara (X-Request-ID) iletirsiniz ve bu, Tellstra kayıtlarına kaydedilir. Bu şekilde, ombudsman (tüm kayıtlara erişime sahip), neyin yanlış gittiğini bulmak için gelen çağrınızı bulabilir.

Hikayenin HTTP'ye uygulanması

Aynısı http istekleri için de geçerlidir - bu, bir müşteri size bir hata veya büyük bir rapor gönderdiğinde neyin yanlış gittiğini bulmanıza yardımcı olmak için (arka uç geliştirici olarak) kullanılan bir kimliktir.

Bu, bunun temel özeti. Herhangi bir sorunuz vb. Sadece bir yorum gönderin ve bunu açıklığa kavuşturmayı umuyorum.


1
Buradaki "benzetme" bence açıklıktan çok kafa karışıklığı yaratıyor. Bir telefon görüşmesi durumunda, alıcı tarafından otomatik olarak kaydedilen rastgele bir numarayı iletmenin bir yolu yoktur ve sonuç olarak hikayeniz anlamsızdır.
Mark Amery

-12

Bu istek başlığı senkronizasyon için kullanılabilir. Çevrimdışı yetenek sunan bir Yapılacaklar listesi oluşturduğunuzu varsayalım. Kullanıcınız 3 öğe oluşturur ve her birine çevrimdışı uygulamada benzersiz bir UUID verilir. Ağ bağlantısı mevcut olduğunda, kayıtlar sunucuya POST edilir ve veritabanından otomatik olarak oluşturulan karşılık gelen kimlikler döndürülür. Daha sonra uygulamanızdaki kimlikleri değiştirebilirsiniz (ör. HTML "li" öğesinin "id" özelliği).


4
Burada açıklanan senaryo, UUID'yi taşımak için bir HTTP başlığının kullanılması anlamına gelmez.
Stephan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.