什么是 X-Request-ID http 头?

我已经在 google 上搜索了很多关于这个主题的文章,阅读了很多关于这个标题的文章,它在 Heroku 的使用,以及基于 Django 的项目。

但是,我脑子里还是一片混乱。

  • 这个标题的目的是什么?
  • 它侵犯用户隐私了吗?
  • 它能帮助追踪用户吗?
165160 次浏览

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

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

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

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

用故事/类比进行解释

你可以把 X-Request-ID想象成你的驾照(某种身份证)。

想象一下访问 车管所:

  1. 你出示你的身份证以获得入场许可,然后你
  2. 排队16个小时,
  3. 16个小时后,车管局会让你回家。也就是说你的请求超时了。机动车管理局的小霸王下午四点三十一分一秒都不工作。

浪费了整整一天——你向国会议员抱怨——嘿: 我排了16个小时的队。议员回答说:

“伙计,我们每天都有成千上万的人访问车管所——当我查看车管所记录时,我该如何识别你——当你来的时候,等等。?

这就是 X-Request-ID 的用武之地。

故事在 HTTP 中的应用

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

故事是用来帮助你回忆的。希望你不要再困惑了-如果我有的话,发表一个评论,我会试着把它弄清楚。谢谢。

用途: 阳痿

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

下面是一些 API 提供商的一句话:

所有 POST、 PUT 和 PATCHHTTP 请求都应该包含唯一的 用于确保等幂消息的 X-Request-Id 头 在重试的情况下处理

如果你的 使它成为一个随机字符串,每个请求都是唯一的,它不会侵犯你的隐私,也不会启用跟踪。

如果你想知道更多关于幂等函数的内容,请阅读 这篇有见地的文章

注意: 正如 Stefan Kögl 评论的那样,这个头部是不标准化的——因此使用了(不推荐的)“ X-”前缀。