HTTP BOSH和HTTP流水线

Kra*_*rab 2 java xmpp http web

我对HTTP BOSH和HTTP Pipelining感到困惑.

BOSH规范:http://xmpp.org/extensions/xep-0124.html

如果客户端需要向连接管理器发送一些数据,那么它只是发送包含数据的第二个请求.不幸的是,大多数受约束的客户端不支持HTTP流水线(单个连接上的并发请求),因此客户端通常需要通过第二个HTTP连接发送数据.

在本规范中有很多关于HTTP流水线的信息,但来自 http://en.wikipedia.org/wiki/HTTP_pipelining

像POST这样的非幂等方法不应该是流水线的.

并且在BOSH规范中:

所有信息都在标准HTTP POST请求和响应的主体中进行编码.每个HTTP主体都包含一个封装器,它封装了正在传输的XML元素(请参阅包装元素).

那么如何将HTTP流水线与HTTP BOSH一起使用?

ig0*_*774 6

HTTP RFC

客户端不应该使用非幂等方法或非幂等方法序列来处理请求(请参阅第9.1.2节).

在这种情况下,"SHOULD NOT"具有RFC 2119给出的含义,即

这个短语或短语"NOT WOMMENDED"意味着在特定情况下可能存在有效理由,当特定行为可接受或甚至有用时,应该理解全部含义并在实施此标签描述的任何行为之前仔细权衡案例

这意味着,一般来说,不建议将HTTP流水线与POST请求结合使用(这符合RFC 2616的概念POST); 但是,HTTP协议实际上并不禁止它.如果它实际上禁止行为,RFC 2616将使用"绝不"的语言.该BOSH规范的作者作出判断,在BOSH对流水线POST请求没有不利影响的情况下.