我已经搜索了很多这个主题,阅读了有关此标题的各种文章,它在Heroku上的使用或基于Django的项目。
然而,它仍然让我感到困惑。
答案 0 :(得分:113)
当您运行客户端访问的Web服务时,可能很难将请求(客户端可以看到)与服务器日志(服务器可以看到)相关联。
X-Request-ID
的想法是客户端可以创建一些随机ID并将其传递给服务器。然后,服务器在其创建的每个日志语句中包含该ID。如果客户端收到错误,它可以在错误报告中包含该ID,允许服务器操作员查找相应的日志语句(无需依赖时间戳,IP等)。
由于此ID由客户端(随机)生成,因此不包含任何敏感信息,因此不应违反用户的隐私。由于每个请求都会创建一个唯一ID,因此跟踪用户也无济于事。
答案 1 :(得分:5)
目的:幂等
对于每个请求,ID都会改变,但是在重试请求时,ID保持不变,接收方可以确保对请求的处理不会超过一次。
这是一些API提供商的报价:
所有POST,PUT和PATCH HTTP请求均应包含唯一的 X-Request-Id标头,用于确保幂等消息 重试时进行处理
如果您将其设为随机字符串(每个请求唯一),则它不会侵犯您的隐私,也不会启用跟踪。
如果您想进一步了解幂等性,请阅读this insightful article。
答案 2 :(得分:2)
你的互联网正在播放(像往常一样),所以你打电话给Tellstra,你在等电话永远......最后你放弃了,沮丧地砰地一声关上电话。 (这是一个失败的电话。在Tellstra的通话记录中有记录。)
“就是这样,我打电话给申诉专员!”
但是Obmudsman有成千上万的通话记录(Tellstra的所有失败查询)。如果你告诉他们你打电话给Telstra,并且你的电话不成功,那还不够: 监察员如何知道,从Tellstra的所有电话记录中知道哪一个是你的 - 这样它可以进一步研究??
这就是X-Request-ID的来源 - 当你调用Tellstra时,你会传递一个随机数(X-Request-ID),这会记录在Tellstra记录中。这样,监察员(可以访问所有记录)将能够找到您的来电,以找出问题所在。
这同样适用于http请求 - 它是一个用于帮助您(作为后端开发人员)查找客户端向您发送错误或大报告时出错的ID。
这是它的基本概要。任何问题等只是发表评论,我希望将其清除。
答案 3 :(得分:-9)
此请求标头可用于同步。我们假设您已经构建了一个提供离线功能的待办事项列表。您的用户创建了3个项目,并且每个项目都在脱机应用程序上获得了唯一的UUID。当网络连接可用时,将记录发布到服务器,并返回从数据库自动生成的相应ID。然后,您可以替换应用中的ID(例如" ID" HTML属性" li"元素)。