从服务器收到几个100-continue

时间:2014-04-02 16:53:53

标签: c++ soap http-headers libcurl http-status-code-100


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

一切都工作正常,我的请求发送"期待100-继续"标志,并且服务器以100-continue响应,之后立即响应200 ok代码以及Web服务响应。

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

  

发送100(继续)响应的原始服务器必须           最终发送一个最终状态代码,一旦请求正文           接收和处理,除非它终止运输           过早联系。

这个词"最终"让我松开了轨道。服务器在最终状态代码之后发送多个100个代码是否可能/常见?

如果有人以前遇到过这个问题,可以指点我如何用libcurl处理多个100响应代码?

提前致谢

2 个答案:

答案 0 :(得分:2)

当前规范在100-continue上表示this

  

100(继续)状态代码表示a的初始部分   请求已收到,尚未被服务器拒绝。服务器打算在完全接收请求并采取行动后发送最终响应。

     

当请求包含包含a的Expect标头字段时   100-继续期望,100响应指示服务器希望接收请求有效载荷主体,如中所述   第5.1.1节。客户端应该继续发送请求并丢弃100响应。

     

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

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

与CURLOPT_FAILONERROR相关。

答案 1 :(得分:0)

我怀疑它是因为有一个未处理的错误,客户端无法正确处理。确保设置CURLOPT_FAILONERROR标志。

有关详细信息,请参阅this SO post