Tiêu đề http X-REQUEST-ID là gì?


97

Tôi đã truy cập rất nhiều vào chủ đề này, đọc nhiều bài báo khác nhau về tiêu đề này, việc sử dụng nó trong Heroku và các dự án dựa trên Django.

Tuy nhiên, tất cả vẫn còn bối rối trong đầu tôi.

  • Mục đích của tiêu đề này là gì?
  • Nó có vi phạm quyền riêng tư của người dùng không?
  • Nó có thể giúp theo dõi người dùng không?

1
@Wrikken Tôi đã làm điều đó rồi ... và tôi vẫn còn nhầm lẫn về tiêu đề này.
Stephan

Sau đó, để (1) xác nhận một yêu cầu web với yêu cầu được chuyển tiếp đến ứng dụng của bạn (2) Không, vì người dùng không gửi nó, bộ định tuyến sẽ đặt nó (3) Xem (2), nhưng nó có thể giúp theo dõi từng cá nhân yêu cầu trong khi gỡ lỗi.
Wrikken

Câu trả lời:


170

Khi bạn đang vận hành một dịch vụ web được máy khách truy cập, có thể khó tương quan các yêu cầu (mà máy khách có thể nhìn thấy) với nhật ký máy chủ (máy chủ có thể nhìn thấy).

Ý tưởng của X-Request-IDnó là một máy khách có thể tạo một số ID ngẫu nhiên và chuyển nó đến máy chủ. Sau đó, máy chủ bao gồm ID đó trong mọi câu lệnh nhật ký mà nó tạo. Nếu máy khách gặp lỗi, nó có thể đưa ID vào báo cáo lỗi, cho phép nhà điều hành máy chủ tra cứu các báo cáo nhật ký tương ứng (mà không cần phải dựa vào dấu thời gian, IP, v.v.).

Vì ID này được tạo (ngẫu nhiên) bởi khách hàng, nó không chứa bất kỳ thông tin nhạy cảm nào và do đó sẽ không vi phạm quyền riêng tư của người dùng. Vì một ID duy nhất được tạo theo yêu cầu, nó cũng không giúp theo dõi người dùng.


@Wrikken đề cập trong nhận xét của anh ấy / cô ấy rằng ID được đặt bởi một bộ định tuyến và ở đây là các khách hàng của nó. Khách hàng là gì?
Stephan

4
Máy khách là phần mềm gửi yêu cầu đến máy chủ, có thể là một trình duyệt hoặc một công cụ kiểm tra căng thẳng như JMeter. Ngoài ra, máy chủ có thể tạo Id yêu cầu nếu một ID không được cung cấp bởi máy khách ban đầu và chuyển nó đến các máy chủ khác, ví dụ: máy chủ web tạo id và chuyển tiếp nó đến máy chủ ứng dụng.
isapir

1
Blog Heroku tuyên bố X-Yêu cầu-ID giúp tương ứng nhiều mục log để HTTP cá nhân (s) yêu cầu: blog.heroku.com/...
Stephan

4
Nó còn được gọi là CorrelationId và không phải là một tiêu đề HTTP chuẩn: en.wikipedia.org/wiki/List_of_HTTP_header_fields X-Request-ID, X-Correlation-ID. Tương quan các yêu cầu HTTP giữa máy khách và máy chủ.
Major

nếu mọi yêu cầu đi kèm với phiên người dùng, thì có cần phải đính kèm X-Request-ID không?
Jerry Chin,

14

Mục đích: Lý tưởng

Với một ID thay đổi cho mọi yêu cầu, nhưng vẫn giữ nguyên trong trường hợp yêu cầu thử lại, người nhận có thể đảm bảo yêu cầu sẽ không được xử lý nhiều lần.

Đây là trích dẫn từ một số nhà cung cấp API:

Tất cả các yêu cầu HTTP POST, PUT và PATCH phải chứa một tiêu đề X-Request-Id duy nhất được sử dụng để đảm bảo xử lý thông báo không hiệu quả trong trường hợp thử lại

Nếu bạn đặt nó thành một chuỗi ngẫu nhiên, duy nhất cho mỗi yêu cầu , nó sẽ không vi phạm quyền riêng tư của bạn và cũng không cho phép theo dõi.

Nếu bạn muốn biết thêm về những gì mà Idempotency mang lại, hãy đọc bài viết sâu sắc này .

NB Như Stefan Kögl nhận xét, tiêu đề này không được chuẩn hóa - do đó tiền tố "X-" (không được dùng nữa).


5
Xin lưu ý rằng mặc dù "một số nhà cung cấp API" có thể sử dụng tiêu đề X-Request-Id theo cách này, nhưng đây không phải là hành vi tiêu chuẩn. Nó thường không thể được sử dụng cho mục đích này.
Stefan Kögl

Một đoạn trích đơn giản khác: restapitutorial.com/lessons/idempotency.html
JayRizzo

1

Giải thích bằng cách sử dụng một câu chuyện / phép loại suy

Internet của bạn đang hoạt động (như bình thường), vì vậy bạn gọi cho Tellstra và bạn đang chờ điện thoại mãi ... cuối cùng bạn bỏ cuộc và đập điện thoại xuống một cách bực bội. (Đây là một cuộc gọi không thành công. Và có một bản ghi về cuộc gọi này trong nhật ký cuộc gọi của Tellstra.)

"Chính là nó, tôi đang gọi Thanh tra!"

Nhưng Obmudsman có hàng nghìn bản ghi cuộc gọi phải trải qua (tất cả các truy vấn thất bại của Tellstra). Nếu bạn nói với họ rằng bạn đã gọi cho Telstra và cuộc gọi của bạn không thành công, điều đó vẫn chưa đủ: làm sao Thanh tra viên biết được, từ tất cả các bản ghi cuộc gọi của Tellstra, cái nào là của bạn - để có thể điều tra thêm? ?

Đó là nơi X-Request-ID xuất hiện - khi bạn gọi Tellstra, bạn sẽ chuyển một số ngẫu nhiên (X-Request-ID) và số này được ghi vào hồ sơ Tellstra. Bằng cách đó, thanh tra viên (có quyền truy cập vào tất cả các bản ghi) sẽ có thể tìm thấy cuộc gọi đến của bạn để tìm ra sự cố.

Ứng dụng câu chuyện vào HTTP

Điều tương tự cũng áp dụng cho các yêu cầu http - đó là một id được sử dụng để giúp bạn (với tư cách là nhà phát triển phụ) tìm ra điều gì đã xảy ra khi khách hàng đưa ra lỗi hoặc báo cáo lớn cho bạn.

Đó là tóm tắt cơ bản của nó. Bất kỳ câu hỏi, vv chỉ cần đăng một bình luận và tôi hy vọng sẽ làm rõ nó.


1
Theo quan điểm của tôi, sự "loại suy" ở đây làm tăng thêm sự nhầm lẫn chứ không phải là rõ ràng. Trong trường hợp một cuộc gọi điện thoại, không có cách nào để chuyển một số ngẫu nhiên được người nhận ghi lại tự động, và do đó, câu chuyện của bạn là vô nghĩa.
Mark Amery

-12

Tiêu đề yêu cầu này có thể được sử dụng để đồng bộ hóa. Giả sử bạn đã tạo danh sách Việc cần làm cung cấp khả năng ngoại tuyến. Người dùng của bạn tạo 3 mục và mỗi mục được cấp một UUID duy nhất trên ứng dụng ngoại tuyến. Khi khả dụng kết nối mạng, các bản ghi được ĐĂNG lên máy chủ và các ID tương ứng được tạo tự động từ cơ sở dữ liệu sẽ được trả về. Sau đó, bạn có thể thay thế các ID trong ứng dụng của mình (ví dụ: thuộc tính "id" của phần tử "li" trong HTML).


4
Tình huống được mô tả ở đây không ngụ ý việc sử dụng tiêu đề HTTP để vận chuyển UUID.
Stephan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.