我使用libcurl(c ++)库向IIS 7.5服务器发出请求。该事务是一个常见的SOAP Web服务
一切都工作正常,我的请求发送"期待100-继续"标志,并且服务器以100-continue响应,之后立即响应200 ok代码以及Web服务响应。
但有时,客户端收到100-continue消息,然后再收到100个代码。这使得客户端报告错误,因为它期望在服务器100代码之后立即获得最终状态代码。我读了W3C HTTP1.1协议:
发送100(继续)响应的原始服务器必须 最终发送一个最终状态代码,一旦请求正文 接收和处理,除非它终止运输 过早联系。
这个词"最终"让我松开了轨道。服务器在最终状态代码之后发送多个100个代码是否可能/常见?
如果有人以前遇到过这个问题,可以指点我如何用libcurl处理多个100响应代码?
提前致谢
答案 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。