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

Ste*_*han 71 http http-headers

我已经搜索了很多这个主题,阅读有关此标题的各种文章,它在Heroku上的使用或基于Django的项目.

但是,它仍然让我感到困惑.

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

Ste*_*ögl 126

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

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

由于此ID由客户端(随机)生成,因此不包含任何敏感信息,因此不应违反用户的隐私.由于每个请求都会创建一个唯一ID,因此跟踪用户也无济于事.

  • 客户端是将请求发送到服务器的软件,可以是浏览器或JMeter等压力测试工具.如果原始客户端没有提供请求ID,服务器也可以生成请求ID,并将其传递给下线的其他服务器,例如,Web服务器生成id并将其转发到应用服务器. (3认同)
  • 也称为CorrelationId,而不是标准的HTTP标头:https://en.wikipedia.org/wiki/List_of_HTTP_header_fields X-Request-ID,X-Correlation-ID。关联客户端和服务器之间的HTTP请求。 (3认同)
  • Heroku 博客声明 X-Request-ID 有助于将多个日志条目与单个 HTTP(s) 请求相关联:https://blog.heroku.com/http_request_id_s_improve_visibility_across_the_application_stack (2认同)

BKS*_*eon 6

使用故事/类比进行解释

您可以将其视为X-Request-ID某种类型的身份证,以便可以唯一地识别您的身份。那么这是什么意思呢?这与我去 DMV 时发生的情况类似

  1. 您从售票机处获得一张“票”(带有 ID 号),然后您
  2. 排队16个小时,
  3. 16 小时后 - 我遇到了客户服务代表,发现有一些小问题不太对劲:我签署的 12 个签名不够匹配。小暴君让我到队伍后面去,但那时已经太晚了。即我的请求超时。(DMV 人员在下午 4:00:00 过后一微秒都不工作)。

一整天都被浪费了——你向国会议员抱怨——嘿:我排队等了16个小时等等。国会议员回复道:

“当我查看 DMV 记录时,我该如何识别您的身份——您何时来等?

这就是 X-Request-ID 的用武之地。只需向他显示号码,他们就可以跟踪您的请求......

故事在 HTTP 中的应用

这同样适用于 http 请求 - 它是一个用于帮助后端开发人员找出问题所在的 ID。客户端使用该 ID 提交请求 - 这是他们创建的 ID(即一些随机数等)。现在服务器可以跟踪它。

故事旨在帮助您记住。

希望您不会进一步感到困惑 - 如果有的话请发表评论,我会尽力澄清。谢谢。

  • 在我看来,这里的“类比”增加了混乱,而不是清晰度。在打电话的情况下,无法传递由接收者自动记录的随机号码,因此你的故事是无意义的。 (7认同)

Eug*_*sky 5

目的:幂等

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

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

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

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

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

  • 请注意,虽然“某些 API 提供者”可能会以这种方式使用 X-Request-Id 标头,但这不是标准行为。它通常不能用于此目的。 (7认同)
  • 这是一种非标准用法。幂等性是一个通用概念,使用所描述的“X-Request-ID”请求标头是实现它的一种方法。我不会推荐它,因为出于多种原因,服务器不应该信任客户端的实现。例如,最好依靠要检索/创建/替换的资源的自然键并使用传统的多用户数据库事务技术避免冲突。 (3认同)