【问题标题】:What is the purpose of Stanza IDs in XMPP?XMPP 中 Stanza ID 的用途是什么?
【发布时间】:2019-06-11 09:04:45
【问题描述】:

有人能解释一下 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 的约定是什么?应该如何构造它们?

【问题讨论】:

    标签: xml xmpp


    【解决方案1】:

    当您使用 type="get"type="set" 发送 IQ 时,您将收到带有 type="result" 和相同的 id

    所以这只是通过 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,因此您知道此响应的请求是什么

    【讨论】:

      【解决方案2】:

      我建议您简单地查看协议规范。 RFC 6120 § 8.1.3. id 解释得很好恕我直言:

      原始实体使用“id”属性来跟踪任何
      它可能收到的与
      相关的响应或错误节 从另一个实体(例如中间服务器)生成的节
      或预期的收件人)。

      'id'的值是否由始发实体决定
      属性仅在其当前流中唯一或唯一
      全球。

      对于 节,推荐用于
      包含“id”属性的原始实体;对于 节,
      这是必需的。

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

      并不是说您的示例显示没有“id”属性集的 IQ 节实际上是无效

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-26
        • 2011-11-06
        • 1970-01-01
        • 2012-06-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多