X-REQUEST-ID http标头是什么?


97

我已经在这个主题上进行了很多搜索,阅读了有关此标头的各种文章,其在Heroku中的用法以及基于Django的项目。

但是,这一切仍然让我困惑。

  • 此标头的目的是什么?
  • 是否侵犯了用户隐私?
  • 它可以帮助跟踪用户吗?

1
@Wrikken我已经做到了……而且我仍然对这个标题感到困惑。
2014年

然后,为了使(1)与转发到您的应用程序的请求合并到一个Webrequest(2)否,因为用户未发送请求,路由器设置了它(3)参见(2),但它可能有助于跟踪个人调试时请求。
2014年

Answers:


169

当您操作客户端访问的Web服务时,可能很难将请求(客户端可以看到)与服务器日志(服务器可以看到)相关联。

的想法X-Request-ID是,客户端可以创建一些随机ID并将其传递给服务器。然后,服务器在其创建的每个日志语句中都包含该ID。如果客户端收到错误,则可以在错误报告中包含该ID,从而使服务器操作员可以查找相应的日志语句(而不必依赖时间戳,IP等)。

由于此ID由客户端(随机)生成,因此它不包含任何敏感信息,因此不应侵犯用户的隐私。由于每个请求都会创建一个唯一的ID,因此也无法帮助跟踪用户。


@Wrikken在他/她的评论中提到ID是由路由器及其客户端设置的。什么是客户?
Stephan 2014年

4
客户端是将请求发送到服务器的软件,可以是浏览器,也可以是压力测试工具,例如JMeter。如果原始客户端未提供请求ID,则服务器也可以生成请求ID,然后将其传递给其他服务器,例如,Web服务器生成该ID并将其转发给应用程序服务器。
isapir'2

1
Heroku博客声明X-Request-ID有助于将多个日志条目与单个HTTP请求关联
Stephan

4
也称为CorrelationId,而不是标准的HTTP标头:en.wikipedia.org/wiki/List_of_HTTP_header_fields X-Request-ID,X-Correlation-ID。关联客户端和服务器之间的HTTP请求。
主要

如果每个请求都带有用户会话,是否仍然需要附加X-Request-ID?
杰里·钱

14

目的:幂等

对于每个请求,ID都会更改,但是在重试请求时,ID保持不变,接收方可以确保该请求不会被多次处理。

这是一些API提供程序的报价:

所有POST,PUT和PATCH HTTP请求都应包含唯一的X-Request-Id标头,该标头用于确保重试时进行幂等消息处理

如果您将其设为随机字符串(每个请求唯一),则不会侵犯您的隐私,也不会启用跟踪。

如果您想进一步了解幂等性,请阅读这篇有见地的文章

注意:如StefanKögl所评论,此标头未标准化-因此(不赞成使用)“ X-”前缀。


5
请注意,尽管“某些API提供程序”可能以这种方式使用X-Request-Id标头,但这不是标准行为。它通常不能用于此目的。
StefanKögl,


1

使用故事/类比的解释

您的互联网正在正常播放,所以您打电话给Tellstra,然后就一直在等待电话……最后,您沮丧地放弃了电话,摔了下来。(这是一个失败的呼叫。并且在Tellstra的呼叫日志中有记录。)

“就是这样,我叫监察专员!”

但是Obmudsman有成千上万的通话记录需要处理(Tellstra的所有失败查询)。如果您告诉他们您给Telstra打电话了,而您的电话却不成功,那还不够:监察专员如何从Tellstra的所有通话记录中知道您是哪一个,以便可以对其进行进一步调查? ?

这就是X-Request-ID的来源-每当您致电Tellstra时,您都将传递一个随机数(X-Request-ID),并将其记录在Tellstra记录中。这样,监察员(可以访问所有记录)将能够找到您的来电以找出问题所在。

故事在HTTP中的应用

这同样适用于http请求-它是一个ID,用于帮助您(作为后端开发人员)找出客户端向您提出错误或重大报告时出了什么问题。

这是它的基本摘要。任何问题等等,只需发表评论,我希望将其清除。


1
我认为这里的“类比”增加了混乱,而不是清晰。对于电话,无法传递接收者自动记录的随机数,因此您的故事是荒谬的。
Mark Amery

-12

此请求标头可用于同步。假设您已经构建了一个提供脱机功能的待办事项列表。您的用户创建了3个项目,并且每个项目在脱机应用程序上都具有唯一的UUID。当网络连接可用时,会将记录过帐到服务器,并返回从数据库自动生成的相应ID。然后,您可以替换应用程序中的ID(例如HTML“ li”元素的“ id”属性)。


4
这里描述的场景并不意味着使用HTTP标头来传输UUID。
斯蒂芬
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.