X-REQUEST-ID httpヘッダーとは何ですか?


97

私はすでにこのテーマをたくさんグーグルで検索し、このヘッダー、Herokuでの使用、およびDjangoに基づくプロジェクトに関するさまざまな記事を読みました。

しかし、それでも頭の中で混乱しています。

  • このヘッダーの目的は何ですか?
  • ユーザーのプライバシーを侵害していませんか?
  • ユーザーの追跡に役立ちますか?

1
@Wrikken私はすでにそれをしました...そして私はまだこのヘッダーについて混乱しています。
ステファン

次に、(1)Webリクエストをアプリケーションに転送されたリクエストと照合するために(2)いいえ、ユーザーが送信しないため、ルーターが設定します(3)(2)を参照してください。ただし、個人の追跡に役立つ場合があります。デバッグ中のリクエスト。
Wrikken 2014

回答:


170

クライアントがアクセスするWebサービスを操作している場合、要求(クライアントが表示できる)とサーバーログ(サーバーが表示できる)を関連付けることが難しい場合があります。

の考え方は、X-Request-IDクライアントがランダムなIDを作成し、それをサーバーに渡すことができるということです。次に、サーバーは、作成するすべてのログステートメントにそのIDを含めます。クライアントがエラーを受け取った場合、バグレポートにIDを含めることができるため、サーバーオペレーターは、対応するログステートメントを検索できます(タイムスタンプやIPなどに依存する必要はありません)。

このIDはクライアントによって(ランダムに)生成されるため、機密情報は含まれていません。したがって、ユーザーのプライバシーを侵害することはありません。リクエストごとに一意のIDが作成されるため、ユーザーの追跡にも役立ちません。


@Wrikkenはコメントの中で、IDはルーターとここではそのクライアントによって設定されたと述べています。クライアントとは何ですか?
ステファン

4
クライアントは、サーバーに要求を送信するソフトウェアであり、ブラウザーまたはJMeterのようなストレステストツールである可能性があります。また、元のクライアントから要求IDが提供されていない場合、サーバーは要求IDを生成し、それを他のサーバーに渡すことができます。たとえば、WebサーバーはIDを生成し、アプリケーションサーバーに転送します。
isapir 2015

1
Herokuのブログには、X-リクエスト-IDは、個々のHTTP(S)要求に複数のログエントリを関連付けることができます宣言しますblog.heroku.com/...
ステファン・

4
これはCorrelationIdとも呼ばれ、標準のHTTPヘッダーではありません:en.wikipedia.org/wiki/List_of_HTTP_header_fields X-Request-ID、X-Correlation-ID。クライアントとサーバー間のHTTPリクエストを相互に関連付けます。
メジャー

すべてのリクエストにユーザーセッションが含まれている場合でも、X-Request-IDを添付する必要がありますか?
ジェリーチン

14

目的:べき等

IDはリクエストごとに変更されますが、リクエストが再試行されても同じままであるため、受信者はリクエストが複数回処理されないようにすることができます。

これはいくつかのAPIプロバイダーからの引用です:

すべてのPOST、PUT、およびPATCH HTTPリクエストには、再試行の場合にべき等メッセージ処理を保証するために使用される一意のX-Request-Idヘッダーが含まれている必要があります

あなたがいる場合、それリクエストごとに固有のランダムな文字列、作る、それはあなたのプライバシーを侵害する、また追跡を有効にしません。

べき等が提供するものについて詳しく知りたい場合は、この洞察に満ちた記事をお読みください

注意StefanKöglがコメントしているように、このヘッダーは標準化されていません。したがって、(非推奨の)「X-」プレフィックスです。


5
「一部のAPIプロバイダー」はこのようにX-Request-Idヘッダーを使用する場合がありますが、これは標準の動作ではないことに注意してください。通常、この目的には使用できません。
ステファンKögl

別の簡単なスニペット:restapitutorial.com/lessons/idempotency.html
JayRizzo

1

ストーリー/アナロジーを使った説明

あなたのインターネットは(いつものように)再生しているので、あなたはテルストラに電話し、あなたは永遠に電話を待っています......最後にあなたはあきらめて、欲求不満で電話をバタンと閉めます。(これは失敗した通話です。Tellstraの通話ログにその記録があります。)

「それだけです、私はオンブズマンと呼んでいます!」

しかし、Ombudsmanには何千もの通話記録があります(Tellstraのすべての失敗したクエリ)。テルストラに電話をかけ、電話が失敗したことを伝えた場合、それだけでは不十分です。オンブズマンは、テルストラのすべての通話記録から、どれがあなたのものであるかをどのように知るのでしょうか。 ?

そこでX-Request-IDが登場します。Tellstraを呼び出すときは常に、乱数(X-Request-ID)を渡し、これがTellstraレコードに記録されます。そうすれば、オンブズマン(すべてのレコードにアクセスできる)が着信を見つけて、何が悪かったのかを見つけることができます。

ストーリーのHTTPへの適用

同じことがhttpリクエストにも当てはまります。これは、クライアントがエラーや大きなレポートを発行したときに何がうまくいかなかったかを(バックエンド開発者として)見つけるのに役立つIDです。

それがその基本的な要約です。質問等はコメントを投稿するだけでクリアしたいです。


1
ここでの「アナロジー」は、私の意見では、明確さではなく混乱を追加します。電話の場合、受信者によって自動的に記録される乱数を渡す方法がないため、あなたの話は無意味です。
マークアメリー

-12

このリクエストヘッダーは、同期に使用できます。オフライン機能を提供するToDoリストを作成したとします。ユーザーは3つのアイテムを作成し、それぞれにオフラインアプリケーションで一意のUUIDが与えられます。ネットワーク接続が利用可能になると、レコードがサーバーにPOSTされ、データベースから自動生成された対応するIDが返されます。次に、アプリ内のIDを置き換えることができます(たとえば、HTMLの「li」要素の「id」属性)。


4
ここで説明するシナリオは、UUIDを転送するためにHTTPヘッダーを使用することを意味するものではありません。
ステファン2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.