2

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

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

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

在这个规范中有很多关于 HTTP 管道的信息,但是来自 http://en.wikipedia.org/wiki/HTTP_pipelining

像 POST 这样的非幂等方法不应该被流水线化。

在 BOSH 规范中:

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

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

4

1 回答 1

6

HTTP RFC

客户端不应使用非幂等方法或非幂等方法序列对请求进行管道传输(参见第 9.1.2 节)。

在这种情况下,“不应”具有RFC 2119给出的含义,即,

此短语或短语“不推荐”表示当特定行为可接受甚至有用时,在特定情况下可能存在正当理由,但在实施使用此标签描述的任何行为之前,应了解全部含义并仔细权衡案例

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

于 2012-08-02T19:38:44.167 回答