代码之家  ›  专栏  ›  技术社区  ›  Norgul

在XMPP中,节ID的目的是什么?

  •  4
  • Norgul  · 技术社区  · 6 年前

    有人能解释ID在一些XMPP XML请求中的作用吗(谈论核心XMPP)?

    例如,我可以通过发送此请求来获取花名册:

    <iq type="get">
        <query xmlns="jabber:iq:roster"></query>
    </iq>
    

    但我也可以通过添加一个随机ID来获取它:

    <iq type="get" id="2346543">
        <query xmlns="jabber:iq:roster"></query>
    </iq>
    

    我为什么应该或不应该使用ID有什么原因吗?是否与安全相关?有什么缺点吗?关于ID的约定是什么?应该如何构建它们?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Flow Matt McDonald    6 年前

    我建议您简单地研究一下协议规范。 RFC 6120 § 8.1.3. id 很好地解释了这一点,imho:

    发起实体使用“id”属性跟踪
    它可能接收到的与
    从另一个实体(如中间服务器)生成的节
    或预期的接受者)。

    “id”的值是否
    属性仅在其当前流中唯一或唯一
    全球地。

    对于<message/>和<presence/>节,建议
    发起实体包括<iq/>节的“id”属性,
    这是必需的。

    如果生成的节包含“id”属性,则它是
    响应或错误节还需要包含“id”
    属性,其中“id”属性的值必须与的值匹配
    生成的节。

    事实上,显示没有“id”属性集的iq节的示例并不是 无效 .

        2
  •  2
  •   Rubycon    6 年前

    当你发送一个智商 类型=“获取” 类型=“设置” 然后您将收到一个回复 类型=“结果” 同样的身份证

    所以这只是为了根据ID匹配对他们请求的响应。

    例如,

    获得名册:

    <iq type="get" id="2346543">
        <query xmlns="jabber:iq:roster"></query>
    </iq>
    

    回应:

    <iq to='icq.exampel.com' from='juliet@example.com' type='result' id='2346543'>
      <query xmlns='jabber:iq:roster'>
        <item jid='123456789@icq.example.com'
              name='Romeo'
              subscription='both'>
          <group>Friends</group>
        </item>
        <item jid='554323654@icq.example.com'
              name='Mercutio'
              subscription='from'>
          <group>Friends</group>
        </item>
        <item jid='997665667@icq.example.com'
              name='Benvolio'
              subscription='both'>
          <group>Friends</group>
        </item>
      </query>
    </iq>
    

    它们包含相同的ID,因此您知道此响应的请求是什么