X-REQUEST-ID http header คืออะไร


97

ฉันได้ googled เรื่องนี้มามากแล้วอ่านบทความต่างๆเกี่ยวกับส่วนหัวนี้การใช้งานใน Heroku และโครงการที่ใช้ Django

อย่างไรก็ตามมันยังคงสับสนอยู่ในหัวของฉัน

  • จุดประสงค์ของส่วนหัวนี้คืออะไร?
  • ละเมิดความเป็นส่วนตัวของผู้ใช้หรือไม่
  • สามารถช่วยติดตามผู้ใช้ได้หรือไม่?

1
@Wrikken ฉันทำไปแล้ว ... และฉันยังคงสับสนเกี่ยวกับส่วนหัวนี้
Stephan

จากนั้นตามลำดับ (1) เพื่อแก้ไขคำขอเว็บที่มีการส่งต่อคำขอไปยังแอปพลิเคชันของคุณ (2) ไม่ใช่เนื่องจากผู้ใช้ไม่ได้ส่งเราเตอร์จะตั้งค่า (3) ดู (2) แต่อาจช่วยติดตามแต่ละรายการได้ ร้องขอในขณะที่ดีบัก
Wrikken

คำตอบ:


170

เมื่อคุณใช้งานบริการเว็บที่เข้าถึงโดยไคลเอนต์อาจเป็นการยากที่จะเชื่อมโยงคำขอ (ที่ไคลเอ็นต์สามารถมองเห็นได้) กับบันทึกของเซิร์ฟเวอร์ (ที่เซิร์ฟเวอร์สามารถมองเห็นได้)

แนวคิดX-Request-IDคือไคลเอนต์สามารถสร้าง ID แบบสุ่มและส่งต่อไปยังเซิร์ฟเวอร์ได้ จากนั้นเซิร์ฟเวอร์จะรวม ID นั้นในทุกคำสั่งบันทึกที่สร้างขึ้น หากไคลเอ็นต์ได้รับข้อผิดพลาดอาจรวม ID ไว้ในรายงานข้อบกพร่องทำให้ผู้ให้บริการเซิร์ฟเวอร์ค้นหาคำสั่งบันทึกที่เกี่ยวข้องได้ (โดยไม่ต้องพึ่งพาการประทับเวลา IPs ฯลฯ )

เนื่องจาก ID นี้ถูกสร้างขึ้น (แบบสุ่ม) โดยไคลเอนต์จึงไม่มีข้อมูลที่ละเอียดอ่อนใด ๆ ดังนั้นจึงไม่ควรละเมิดความเป็นส่วนตัวของผู้ใช้ เนื่องจาก ID เฉพาะถูกสร้างขึ้นตามคำขอจึงไม่ได้ช่วยในการติดตามผู้ใช้


@Wrikken กล่าวในความคิดเห็นของเขา / เธอว่า ID ถูกตั้งค่าโดยเราเตอร์และที่นี่ลูกค้า ลูกค้าคืออะไร?
Stephan

4
ไคลเอนต์คือซอฟต์แวร์ที่ส่งคำขอไปยังเซิร์ฟเวอร์อาจเป็นเบราว์เซอร์หรือเครื่องมือทดสอบความเครียดเช่น JMeter นอกจากนี้เซิร์ฟเวอร์ยังสามารถสร้างรหัสคำขอได้หากไคลเอ็นต์ดั้งเดิมไม่ได้ให้มาและส่งต่อไปยังเซิร์ฟเวอร์อื่น ๆ ในบรรทัดเช่นเว็บเซิร์ฟเวอร์สร้าง id และส่งต่อไปยังแอ็พพลิเคชันเซิร์ฟเวอร์
isapir

1
บล็อก Heroku ประกาศ X-Request-ID ช่วยเชื่อมโยงรายการบันทึกหลายรายการกับคำขอ HTTP แต่ละรายการ: blog.heroku.com/…
Stephan

4
เรียกอีกอย่างว่า CorrelationId ไม่ใช่ส่วนหัว HTTP มาตรฐาน: en.wikipedia.org/wiki/List_of_HTTP_header_fields X-Request-ID, X-Correlation-ID เชื่อมโยงคำร้องขอ HTTP ระหว่างไคลเอนต์และเซิร์ฟเวอร์
เมเจอร์

หากทุกคำขอมาพร้อมกับเซสชันของผู้ใช้จำเป็นต้องแนบ X-Request-ID หรือไม่
Jerry Chin

14

วัตถุประสงค์: Idempotency

ด้วย ID ที่เปลี่ยนแปลงสำหรับทุกคำขอ แต่จะยังคงเหมือนเดิมในกรณีที่มีการลองคำขออีกครั้งผู้รับสามารถมั่นใจได้ว่าคำขอจะไม่ได้รับการประมวลผลเกินหนึ่งครั้ง

นี่คือคำพูดจากผู้ให้บริการ API บางราย:

คำขอ POST, PUT และ PATCH HTTP ทั้งหมดควรมีส่วนหัว X-Request-Id ที่ไม่ซ้ำกันซึ่งใช้เพื่อให้แน่ใจว่ามีการประมวลผลข้อความ idempotent ในกรณีที่ลองใหม่

หากคุณกำหนดให้เป็นสตริงแบบสุ่มไม่ซ้ำกันตามคำขอจะไม่ละเมิดความเป็นส่วนตัวของคุณหรือเปิดใช้งานการติดตาม

หากคุณต้องการทราบข้อมูลเพิ่มเติมของสิ่งที่ Idempotency มีให้อ่านบทความนี้ลึกซึ้ง

หมายเหตุตามที่ Stefan Köglแสดงความคิดเห็นส่วนหัวนี้จึงไม่ได้มาตรฐานดังนั้นคำนำหน้า "X-" (เลิกใช้แล้ว)


5
โปรดทราบว่าแม้ว่า "ผู้ให้บริการ API บางราย" อาจใช้ส่วนหัว X-Request-Id ในลักษณะนี้ แต่นี่ไม่ใช่พฤติกรรมมาตรฐาน โดยทั่วไปไม่สามารถใช้เพื่อวัตถุประสงค์นี้ได้
Stefan Kögl


1

คำอธิบายโดยใช้เรื่องราว / การเปรียบเทียบ

อินเทอร์เน็ตของคุณกำลังเล่น (ตามปกติ) คุณจึงโทรหา Tellstra และคุณกำลังรอโทรศัพท์ตลอดไป ...... ในที่สุดคุณก็ยอมแพ้และปิดโทรศัพท์ลงด้วยความหงุดหงิด (นี่คือการโทรที่ล้มเหลวและมีการบันทึกไว้ในบันทึกการโทรของ Tellstra)

“ นั่นสินะฉันเรียกผู้ตรวจการแผ่นดิน!”

แต่ Obmudsman มีบันทึกการโทรหลายพันรายการที่ต้องดำเนินการ (คำถามที่ล้มเหลวทั้งหมดของ Tellstra) หากคุณบอกพวกเขาว่าคุณโทรหา Telstra และการโทรของคุณไม่ประสบความสำเร็จนั่นจะไม่เพียงพอ: ผู้ตรวจการแผ่นดินจะรู้ได้อย่างไรจากบันทึกการโทรทั้งหมดของ Tellstra ว่าอันไหนเป็นของคุณเพื่อให้สามารถตรวจสอบเพิ่มเติมได้ เหรอ?

นั่นคือจุดที่ X-Request-ID เข้ามา - เมื่อคุณโทรหา Tellstra คุณจะส่งต่อหมายเลขสุ่ม (X-Request-ID) และสิ่งนี้จะถูกบันทึกไว้ในระเบียน Tellstra ด้วยวิธีนี้ผู้ตรวจการแผ่นดิน (มีสิทธิ์เข้าถึงบันทึกทั้งหมด) จะสามารถค้นหาสายเรียกเข้าของคุณเพื่อดูว่าเกิดอะไรขึ้น

การประยุกต์ใช้เรื่องราวกับ HTTP

เช่นเดียวกับคำขอ http - เป็นรหัสที่ใช้เพื่อช่วยคุณ (ในฐานะผู้พัฒนาส่วนหลัง) ค้นหาว่าเกิดอะไรขึ้นเมื่อลูกค้าแจ้งข้อผิดพลาดหรือรายงานใหญ่ให้คุณ

นั่นคือสรุปพื้นฐานของมัน คำถามอื่น ๆ เพียงโพสต์ความคิดเห็นและฉันหวังว่าจะกระจ่างขึ้น


1
"การเปรียบเทียบ" ที่นี่เพิ่มความสับสนในความคิดของฉันมากกว่าความชัดเจน ในกรณีของการโทรศัพท์ไม่มีวิธีใดที่จะส่งต่อหมายเลขสุ่มที่ผู้รับบันทึกโดยอัตโนมัติและส่งผลให้เรื่องราวของคุณเป็นเรื่องไร้สาระ
Mark Amery

-12

ส่วนหัวของคำขอนี้สามารถใช้สำหรับการซิงค์ สมมติว่าคุณได้สร้างรายการสิ่งที่ต้องทำที่ให้ความสามารถแบบออฟไลน์ ผู้ใช้ของคุณสร้าง 3 รายการและแต่ละรายการจะได้รับ UUID เฉพาะในแอปพลิเคชันออฟไลน์ เมื่อมีการเชื่อมต่อเครือข่ายเรกคอร์ดจะถูกโพสต์ไปยังเซิร์ฟเวอร์และส่งคืน ID ที่เกี่ยวข้องโดยอัตโนมัติจากฐานข้อมูล จากนั้นคุณสามารถแทนที่ ID ในแอปของคุณ (เช่นแอตทริบิวต์ "id" ขององค์ประกอบ HTML "li")


4
สถานการณ์ที่อธิบายไว้ที่นี่ไม่ได้หมายความถึงการใช้ส่วนหัว HTTP สำหรับการขนส่ง UUID
Stephan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.