Apa itu header http X-REQUEST-ID?

97

Saya sudah banyak mencari di Google subjek ini, membaca berbagai artikel tentang tajuk ini, penggunaannya di Heroku, dan proyek-proyek berdasarkan Django.

Namun, itu semua masih membingungkan di kepalaku.

  • Apa tujuan tajuk ini?
  • Apakah itu melanggar privasi pengguna?
  • Bisakah itu membantu melacak pengguna?
Stephan
sumber
1
@Wrikken Saya sudah melakukan itu ... dan saya masih bingung tentang header ini.
Stephan
Kemudian, untuk (1) mengatur permintaan web dengan permintaan yang diteruskan ke aplikasi Anda (2) Tidak, karena pengguna tidak mengirimnya, router mengaturnya (3) Lihat (2), tetapi mungkin membantu melacak individu permintaan saat debugging.
Wrikken

Jawaban:

170

Saat Anda mengoperasikan layanan web yang diakses oleh klien, mungkin sulit untuk menghubungkan permintaan (yang dapat dilihat klien) dengan log server (yang dapat dilihat oleh server).

Idenya X-Request-IDadalah bahwa klien dapat membuat beberapa ID acak dan meneruskannya ke server. Server kemudian memasukkan ID itu di setiap pernyataan log yang dibuatnya. Jika klien menerima kesalahan, ia dapat memasukkan ID dalam laporan bug, memungkinkan operator server untuk mencari pernyataan log yang sesuai (tanpa harus bergantung pada stempel waktu, IP, dll).

Karena ID ini dibuat (secara acak) oleh klien, ID ini tidak berisi informasi sensitif, dan karenanya tidak melanggar privasi pengguna. Karena ID unik dibuat per permintaan, itu juga tidak membantu melacak pengguna.

Stefan Kögl
sumber
@Wrikken menyebutkan dalam komentarnya bahwa ID ditetapkan oleh router dan di sini kliennya. Apakah klien itu?
Stephan
4
Klien adalah perangkat lunak yang mengirimkan permintaan ke server, bisa menjadi browser atau alat uji stres seperti JMeter. Juga server dapat menghasilkan Id Permintaan jika salah satu tidak disediakan oleh klien asli, dan meneruskannya ke server lain di telepon, misalnya server web menghasilkan id dan meneruskannya ke server aplikasi.
isapir
1
Blog Heroku menyatakan X-Request-ID membantu menghubungkan beberapa entri log dengan permintaan HTTP (s) individu: blog.heroku.com/…
Stephan
4
Ini juga dikenal sebagai CorrelationId dan bukan header HTTP standar: en.wikipedia.org/wiki/List_of_HTTP_header_fields X-Request-ID, X-Correlation-ID. Mengkorelasikan permintaan HTTP antara klien dan server.
Mayor
jika setiap permintaan datang dengan sesi pengguna, apakah masih perlu melampirkan X-Request-ID?
Jerry Chin
14

Tujuan: Idempotensi

Dengan ID yang berubah untuk setiap permintaan, tetapi tetap sama jika ada permintaan ulang, penerima dapat memastikan permintaan tidak akan diproses lebih dari sekali.

Ini adalah kutipan dari beberapa penyedia API:

Semua permintaan HTTP POST, PUT, dan PATCH harus berisi header X-Request-Id unik yang digunakan untuk memastikan pemrosesan pesan idempoten jika ada percobaan ulang

Jika Anda menjadikannya string acak, unik per permintaan , itu tidak akan melanggar privasi Anda, atau mengaktifkan pelacakan.

Jika Anda ingin tahu lebih banyak tentang apa yang ditawarkan idempotensi, baca artikel berwawasan ini .

NB Seperti komentar Stefan Kögl, header ini tidak terstandarisasi - oleh karena itu prefiks "X-" (tidak digunakan lagi).

Evgeniy Berezovsky
sumber
5
Harap diperhatikan bahwa meskipun "beberapa penyedia API" mungkin menggunakan header X-Request-Id dengan cara ini, ini bukanlah perilaku standar. Biasanya tidak dapat digunakan untuk tujuan ini.
Stefan Kögl
Cuplikan Sederhana Lainnya: restapitutorial.com/lessons/idempotency.html
JayRizzo
1

Penjelasan menggunakan cerita / analogi

Internet Anda sedang bermain (seperti biasa), jadi Anda menelepon Tellstra dan Anda menunggu di telepon selamanya ...... akhirnya Anda menyerah dan membanting telepon karena frustrasi. (Ini adalah panggilan yang gagal. Dan ada catatannya di log panggilan Tellstra.)

"Itu dia, saya menelepon Ombudsman!"

Tetapi Obmudsman memiliki ribuan catatan panggilan yang harus dilalui (semua pertanyaan yang gagal dari Tellstra). Jika Anda memberi tahu mereka bahwa Anda menelepon Telstra, dan bahwa panggilan Anda tidak berhasil, itu tidak akan cukup: bagaimana Ombudsman akan tahu, dari semua catatan panggilan Tellstra, yang mana milik Anda - sehingga dapat diselidiki lebih lanjut? ?

Di situlah X-Request-ID masuk - kapan pun Anda menelepon Tellstra, Anda akan mengirimkan nomor acak (X-Request-ID) dan ini dicatat dalam catatan Tellstra. Dengan begitu, ombudsman (memiliki akses ke semua catatan) akan dapat menemukan panggilan masuk Anda untuk mencari tahu apa yang salah.

Penerapan cerita ke HTTP

Hal yang sama berlaku untuk permintaan http - ini adalah id yang digunakan untuk membantu Anda (sebagai pengembang back end) mencari tahu apa yang salah ketika klien mengeluarkan Anda dengan kesalahan atau laporan besar.

Itulah ringkasan dasarnya. Ada pertanyaan, dll. Cukup kirim komentar dan saya berharap untuk menjernihkannya.

BKSpurgeon
sumber
1
Menurut saya, "analogi" di sini menambah kebingungan, bukan kejelasan. Dalam kasus panggilan telepon, tidak ada cara untuk meneruskan nomor acak yang secara otomatis dicatat oleh penerima, dan akibatnya cerita Anda tidak masuk akal.
Mark Amery
-12

Header permintaan ini dapat digunakan untuk sinkronisasi. Katakanlah Anda telah membuat daftar ToDo yang menawarkan kemampuan offline. Pengguna Anda membuat 3 item dan masing-masing diberi UUID unik pada aplikasi offline. Ketika konektivitas jaringan tersedia, catatan dikirim ke server dan ID terkait yang dibuat secara otomatis dari database dikembalikan. Anda kemudian dapat mengganti ID di aplikasi Anda (misalnya atribut "id" dari elemen HTML "li").

Tandai Png
sumber
4
Skenario yang dijelaskan di sini tidak menyiratkan penggunaan header HTTP untuk mengangkut UUID.
Stephan