xmpp协议3
4.6. 流特性
如果发送实体在其发送的初始流hea的人中包含了版本属性且此属性值至少为“1.0”,那么接受实体必须(MUST)发送一个<features/>子元素(带有流命名空间的前缀)给发送实体,用于报告那些可制定的任何流级别的特性(或者是其它必须注册的性能)。目前,这个只用于注册TLS的使用,SASL的使用以及这儿定义的资源绑定和定义在[XMPP-IM]中的建立会话;可是,在将来流的功能特性能够用来注册其它被制定的特性。如果一个实体不理解或支持一些特性,它应该(SHOULD)忽略它们。如果需要在提供非安全相关特征前成功的制定一个或多个安全特性(如:TLS和SASL),那么在制定相关的安全特性前我们不应该(SHOULD NOT)在已注册的流特性中包含那些非安全相关特性。
4.7. 流错误
流的根元素可以(MAY)包含一个被赋予流命名空间前缀的<error/>子元素。如果错误子元素感觉到一个流级别错误发生,该错误子元素必须(MUST)由一个兼容实体(通常是一个服务器而非客户端)来发送。
4.7.1. 规则
以下规则应用于流级别错误:
1. 我们设想说有流级别的错误都是不可复原的;因此,要是在流级别上发生了错误,侦查到该错误的实体必须(MUST)发送一个流错误给其它实体,然后发送一个闭</stream>标志,并终止underlyingTCP连接。
2. 如果在流被建立期间发生错误,接收实体必须(MUST)仍旧发送起始<stream>标记,将<error/>元素作为流元素的子元素包括在内,然后发送关闭</stream>标记,并终止潜在的TCP连接。此种情况下,如果初始实体在‘to’属性(或根本没提供 ‘to’属性)中提供了一个未知主机,服务器应当(SHOULD)在流头的‘from’属性中提供服务器的授权主机名,并在终止前发送。
4.7.2. 语法
流错误的语法如下:
<stream:error>
<defined-condition xmlns='urn:ietf:params:xml:ns:xmpp-streams'/>
<text xmlns='urn:ietf:params:xml:ns:xmpp-streams'
xml:lang='langcode'>
OPTIONAL descriptive text
</text>
[OPTIONAL application-specific condition element]
</stream:error>
<error/>元素:
1. 必须(MUST)包含一个子元素,此子元素与后面定义的节错误因素之一相符;此子元素必须(MUST)由‘urn:ietf:params:xml:ns:xmpp-streams’命名空间限定。
2. 可能(MAY)包含一个<text/>子元素,用于包含更详细的描述错误的XML字符数据;此子元素必须(MUST)由‘urn:ietf: params:xml:ns:xmpp-streams’命名空间限定,并且,应当(SHOULD)有一个'xml:lang'属性来指定XML字符数据使用的语言。
3. 可能(MAY)包含一个用于说明特定应用中的错误因素的子元素;此元素必须(MUST)由一个已定义的应用的命名空间来限定,并且,它的结构也由那个命名空间来定义。
<text/>元素是可选(OPTIONAL)的。如果包含了此元素,它应当(SHOULD)仅用于提供描述性或诊断性的信息,来补充一个已定义的因素或特殊应用中的因素所表示的意思;它不应当(SHOULD NOT)由一个应用以程序化的形式叙述。它不应当(SHOULD NOT)作为错误消息展示给一个用户,但可以(MAY)特定条件下显示在与包含错误因素的元素(或元素们)相关的错误消息中。
4.7.3 已定义因素
以下定义了流级别的错误因素:
1. <bad-format/> -- 已经发送XML的实体不能被处理;此错误可以(MAY)用于代替更特殊的XML相关错误,例如:<bad-namespace- prefix/>、<invalid-xml/>、<restricted-xml/>、<unsupported -encoding/>和<xml-not-well-formed/>,虽然更特殊的错误才是首选。
2. <bad-namespace-prefix/> -- 实体发送了一个不被支持的名空间前缀,或在一个需要那样一个前缀的元素中发送了没有命名空间的前缀(参考XML命名空间名与前缀(11.2))。
3. <conflict/> -- 服务器正为实体关闭活动流,因为一个已经被初始化的新流与现存流冲突。
4. <connection-timeout/> -- 一段时间内(根据本地服务配置)实体并不通过流产生任何通信。
5. <host-gone/> -- 由初始实体在流头中提供的‘to’属性值对应于一个主机名,而此主机名已不再被一个服务器当作主机名了。
6. <host-unknown/> -- 由初始实体在流头中提供的‘to’属性值与服务器所拥有的主机名不一致。
7. <improper-addressing/> -- 一个在两个服务器间发送的节,缺少‘to’或‘from’属性(或此属性无值)
8. <internal-server-error/> -- 服务器经历了错误配置或其它未定义内部错误使其无法提供服务。
9. <invalid-from/> -- 在‘from’地址中提供的JID或主机名与已授权的JID或有效域协商不匹配,此有效域协商为通过SASL或回叫服务器间的协商,或通过授权与资源绑定的客户端与服务器间的协商。
10. <invalid-id/> -- 流ID或回叫ID是无效的或与以前提供的ID不匹配。
11. <invalid-namespace/> -- 流命名空间名不只是http://etherx.jabber.org/streams,或回叫命名空间名不只是"jabber:server:dialback"(参考XML命名空间名与前缀(11.2))
12. <invalid-xml/> -- 实体通过流向执行验证的服务器发送了无效的XML(参考验证(11.3))。
13. <not-authorized/> -- 实体试图在流被认证前发送数据,或不授权执行一个相关流协商的活动;接收实体在发送流错误前不准处理违规节。
14. <policy-violation/> -- 实体违反了某些本地策略;服务器可能选择在<text/>元素或特殊-应用条件元素中指定策略。
15. <remote-connection-failed/> -- 服务器不能适当的连接到远程实体,需要认证或授权。
16. <resource-constraint/> -- 服务器缺少提供服务给流的必要的系统资源。
17. <restricted-xml/> -- 实体试图发送受限的XML特征,例如评注、处理介绍,DTD,实体参考,或保留字符(参考(11.1))。
18. <see-other-host/> -- 服务器将不提供服务给初始实体,但正重定向传输给另一个主机;服务器应当指定替换的主机名或IP地址(必须是有效域标识符),作为<see-other-host/>元素的XML字符数据。
19. <system-shutdown/> -- 服务器被关闭,并且所有的活动流被关闭。
20. <undefined-condition/> -- 错误因素是由此列表中的其它已定义因素中的一个;此错误因素应当仅用于与特殊应用错误因素相结合。
21. <unsupported-encoding/> -- 初始实体以不被服务器支持的编码给流编码(11.5)
22. <unsupported-stanza-type/> -- 初始实体发送了一个不被服务器支持的第一级子流。
23. <unsupported-version/> -- 由初始实体在流头提供的版本属性值指定了一个不被服务器支持的XMPP版本;服务器可能在<text/>元素中指定它支持的版本。
24. <xml-not-well-formed/> -- 初始实体发送了不标准的XML,标准的XML由[XML]定义。
接下来是一个例子
此部分包含两个简化的客户端与服务器(“C”行是从客户端发送到服务器,而“S”行是由服务器发送到客户端)间基于流会话的例子;这些例子用于进一步的介绍这些概念。
A basic "session": //一个基础的会话
C: <?xml version='1.0'?>
<stream:stream
to='example.com'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
version='1.0'>
S: <?xml version='1.0'?>
<stream:stream
from='example.com'
id='someid'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
version='1.0'>
... encryption, authentication, and resource binding ...
C: <message from='juliet@example.com'
to='romeo@example.net'
xml:lang='en'>
C: <body>Art thou not Romeo, and a Montague?</body>
C: </message>
S: <message from='romeo@example.net'
to='juliet@example.com'
xml:lang='en'>
S: <body>Neithe*, **ir saint, if either thee dislike.</body>
S: </message>
C: </stream:stream>
S: </stream:stream>
A "session" gone bad: //出现错误的会话
C: <?xml version='1.0'?>
<stream:stream
to='example.com'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
version='1.0'>
S: <?xml version='1.0'?>
<stream:stream
from='example.com'
id='someid'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
version='1.0'>
... encryption, authentication, and resource binding ...
C: <message xml:lang='en'>
<body>Bad XML, no closing body tag!
</message>
S: <stream:error>
<xml-not-well-formed
xmlns='urn:ietf:params:xml:ns:xmpp-streams'/>
</stream:error>
S: </stream:stream>
我想到这里xmpp协议应该是有一个简单了解哦。上面都是基础。深入的我会在我的空间里接着写的!
如果发送实体在其发送的初始流hea的人中包含了版本属性且此属性值至少为“1.0”,那么接受实体必须(MUST)发送一个<features/>子元素(带有流命名空间的前缀)给发送实体,用于报告那些可制定的任何流级别的特性(或者是其它必须注册的性能)。目前,这个只用于注册TLS的使用,SASL的使用以及这儿定义的资源绑定和定义在[XMPP-IM]中的建立会话;可是,在将来流的功能特性能够用来注册其它被制定的特性。如果一个实体不理解或支持一些特性,它应该(SHOULD)忽略它们。如果需要在提供非安全相关特征前成功的制定一个或多个安全特性(如:TLS和SASL),那么在制定相关的安全特性前我们不应该(SHOULD NOT)在已注册的流特性中包含那些非安全相关特性。
4.7. 流错误
流的根元素可以(MAY)包含一个被赋予流命名空间前缀的<error/>子元素。如果错误子元素感觉到一个流级别错误发生,该错误子元素必须(MUST)由一个兼容实体(通常是一个服务器而非客户端)来发送。
4.7.1. 规则
以下规则应用于流级别错误:
1. 我们设想说有流级别的错误都是不可复原的;因此,要是在流级别上发生了错误,侦查到该错误的实体必须(MUST)发送一个流错误给其它实体,然后发送一个闭</stream>标志,并终止underlyingTCP连接。
2. 如果在流被建立期间发生错误,接收实体必须(MUST)仍旧发送起始<stream>标记,将<error/>元素作为流元素的子元素包括在内,然后发送关闭</stream>标记,并终止潜在的TCP连接。此种情况下,如果初始实体在‘to’属性(或根本没提供 ‘to’属性)中提供了一个未知主机,服务器应当(SHOULD)在流头的‘from’属性中提供服务器的授权主机名,并在终止前发送。
4.7.2. 语法
流错误的语法如下:
<stream:error>
<defined-condition xmlns='urn:ietf:params:xml:ns:xmpp-streams'/>
<text xmlns='urn:ietf:params:xml:ns:xmpp-streams'
xml:lang='langcode'>
OPTIONAL descriptive text
</text>
[OPTIONAL application-specific condition element]
</stream:error>
<error/>元素:
1. 必须(MUST)包含一个子元素,此子元素与后面定义的节错误因素之一相符;此子元素必须(MUST)由‘urn:ietf:params:xml:ns:xmpp-streams’命名空间限定。
2. 可能(MAY)包含一个<text/>子元素,用于包含更详细的描述错误的XML字符数据;此子元素必须(MUST)由‘urn:ietf: params:xml:ns:xmpp-streams’命名空间限定,并且,应当(SHOULD)有一个'xml:lang'属性来指定XML字符数据使用的语言。
3. 可能(MAY)包含一个用于说明特定应用中的错误因素的子元素;此元素必须(MUST)由一个已定义的应用的命名空间来限定,并且,它的结构也由那个命名空间来定义。
<text/>元素是可选(OPTIONAL)的。如果包含了此元素,它应当(SHOULD)仅用于提供描述性或诊断性的信息,来补充一个已定义的因素或特殊应用中的因素所表示的意思;它不应当(SHOULD NOT)由一个应用以程序化的形式叙述。它不应当(SHOULD NOT)作为错误消息展示给一个用户,但可以(MAY)特定条件下显示在与包含错误因素的元素(或元素们)相关的错误消息中。
4.7.3 已定义因素
以下定义了流级别的错误因素:
1. <bad-format/> -- 已经发送XML的实体不能被处理;此错误可以(MAY)用于代替更特殊的XML相关错误,例如:<bad-namespace- prefix/>、<invalid-xml/>、<restricted-xml/>、<unsupported -encoding/>和<xml-not-well-formed/>,虽然更特殊的错误才是首选。
2. <bad-namespace-prefix/> -- 实体发送了一个不被支持的名空间前缀,或在一个需要那样一个前缀的元素中发送了没有命名空间的前缀(参考XML命名空间名与前缀(11.2))。
3. <conflict/> -- 服务器正为实体关闭活动流,因为一个已经被初始化的新流与现存流冲突。
4. <connection-timeout/> -- 一段时间内(根据本地服务配置)实体并不通过流产生任何通信。
5. <host-gone/> -- 由初始实体在流头中提供的‘to’属性值对应于一个主机名,而此主机名已不再被一个服务器当作主机名了。
6. <host-unknown/> -- 由初始实体在流头中提供的‘to’属性值与服务器所拥有的主机名不一致。
7. <improper-addressing/> -- 一个在两个服务器间发送的节,缺少‘to’或‘from’属性(或此属性无值)
8. <internal-server-error/> -- 服务器经历了错误配置或其它未定义内部错误使其无法提供服务。
9. <invalid-from/> -- 在‘from’地址中提供的JID或主机名与已授权的JID或有效域协商不匹配,此有效域协商为通过SASL或回叫服务器间的协商,或通过授权与资源绑定的客户端与服务器间的协商。
10. <invalid-id/> -- 流ID或回叫ID是无效的或与以前提供的ID不匹配。
11. <invalid-namespace/> -- 流命名空间名不只是http://etherx.jabber.org/streams,或回叫命名空间名不只是"jabber:server:dialback"(参考XML命名空间名与前缀(11.2))
12. <invalid-xml/> -- 实体通过流向执行验证的服务器发送了无效的XML(参考验证(11.3))。
13. <not-authorized/> -- 实体试图在流被认证前发送数据,或不授权执行一个相关流协商的活动;接收实体在发送流错误前不准处理违规节。
14. <policy-violation/> -- 实体违反了某些本地策略;服务器可能选择在<text/>元素或特殊-应用条件元素中指定策略。
15. <remote-connection-failed/> -- 服务器不能适当的连接到远程实体,需要认证或授权。
16. <resource-constraint/> -- 服务器缺少提供服务给流的必要的系统资源。
17. <restricted-xml/> -- 实体试图发送受限的XML特征,例如评注、处理介绍,DTD,实体参考,或保留字符(参考(11.1))。
18. <see-other-host/> -- 服务器将不提供服务给初始实体,但正重定向传输给另一个主机;服务器应当指定替换的主机名或IP地址(必须是有效域标识符),作为<see-other-host/>元素的XML字符数据。
19. <system-shutdown/> -- 服务器被关闭,并且所有的活动流被关闭。
20. <undefined-condition/> -- 错误因素是由此列表中的其它已定义因素中的一个;此错误因素应当仅用于与特殊应用错误因素相结合。
21. <unsupported-encoding/> -- 初始实体以不被服务器支持的编码给流编码(11.5)
22. <unsupported-stanza-type/> -- 初始实体发送了一个不被服务器支持的第一级子流。
23. <unsupported-version/> -- 由初始实体在流头提供的版本属性值指定了一个不被服务器支持的XMPP版本;服务器可能在<text/>元素中指定它支持的版本。
24. <xml-not-well-formed/> -- 初始实体发送了不标准的XML,标准的XML由[XML]定义。
接下来是一个例子
此部分包含两个简化的客户端与服务器(“C”行是从客户端发送到服务器,而“S”行是由服务器发送到客户端)间基于流会话的例子;这些例子用于进一步的介绍这些概念。
A basic "session": //一个基础的会话
C: <?xml version='1.0'?>
<stream:stream
to='example.com'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
version='1.0'>
S: <?xml version='1.0'?>
<stream:stream
from='example.com'
id='someid'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
version='1.0'>
... encryption, authentication, and resource binding ...
C: <message from='juliet@example.com'
to='romeo@example.net'
xml:lang='en'>
C: <body>Art thou not Romeo, and a Montague?</body>
C: </message>
S: <message from='romeo@example.net'
to='juliet@example.com'
xml:lang='en'>
S: <body>Neithe*, **ir saint, if either thee dislike.</body>
S: </message>
C: </stream:stream>
S: </stream:stream>
A "session" gone bad: //出现错误的会话
C: <?xml version='1.0'?>
<stream:stream
to='example.com'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
version='1.0'>
S: <?xml version='1.0'?>
<stream:stream
from='example.com'
id='someid'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
version='1.0'>
... encryption, authentication, and resource binding ...
C: <message xml:lang='en'>
<body>Bad XML, no closing body tag!
</message>
S: <stream:error>
<xml-not-well-formed
xmlns='urn:ietf:params:xml:ns:xmpp-streams'/>
</stream:error>
S: </stream:stream>
我想到这里xmpp协议应该是有一个简单了解哦。上面都是基础。深入的我会在我的空间里接着写的!