4


我正在使用 libcurl (c++) 库向 IIS 7.5 服务器发出请求。该事务是一个常见的 SOAP Web

服务 一切正常,我的请求发送一个“期望 100-继续”标志,服务器以 100-继续响应,然后立即响应 200 ok 代码以及 Web 服务响应。

但有时,客户端会收到一条 100-continue 消息,然后又收到 100 个代码。这会使客户端报告错误,因为它期望在服务器 100 代码之后立即出现最终状态代码。我在 W3C HTTP1.1 协议中阅读:

发送 100(继续)响应的源服务器必须最终发送最终状态代码,一旦请求主体被接收和处理,除非它提前终止传输连接。

“最终”这个词让我迷失了方向。服务器在最终状态代码之后发送几个 100 个代码是否可能/常见?

如果有人以前遇到过这个问题,可以指出关于如何使用 libcurl 处理多个 100 响应代码的任何解释吗?

提前致谢

4

2 回答 2

3

当前的规范在 100-continue 上这样说:

100 (Continue) 状态码表示请求的初始部分已经被接收到并且还没有被服务器拒绝。服务器打算在请求被完全接收并采取行动后发送最终响应。

当请求包含一个包含 100-continue 期望的 Expect 头字段时,100 响应表明服务器希望接收请求有效负载正文,如第 5.1.1 节所述。客户端应该继续发送请求并丢弃 100 响应。

如果请求不包含包含 100-continue 期望的 Expect 标头字段,则客户端可以简单地丢弃此临时响应。

我读它的方式,它不应该超过一个 100-continue 响应头,这就是 libcurl 像这样工作的原因。我从来没有见过这种情况(多个 100 响应)发生并且我已经做了一段时间的 HTTP(我是 curl 的主要开发人员)。要改变这种行为,我希望你需要稍微修补 libcurl 以允许这种情况发生。

它与 CURLOPT_FAILONERROR 无关

于 2014-04-03T07:00:31.953 回答
0

我怀疑这是因为客户端未正确处理未处理的错误。确保设置CURLOPT_FAILONERROR标志。

有关更多信息,请参阅此 SO 帖子

于 2014-04-02T17:08:11.663 回答