我正在使用libcurl(c ++)库向IIS 7.5服务器发出请求。该事务是一个通用的 SOAP Web 服务
一切正常,我的请求发送了一个"期望 100-continue"标志,服务器以 100-continue 响应,然后立即响应 200 ok 代码以及 Web 服务响应。
但有时,客户端会收到一条 100 继续消息,然后是另一个 100 代码。这使得客户端报告错误,因为它期望在服务器100代码之后立即出现最终状态代码。我在W3C HTTP1.1协议中读到:
发送 100(继续)响应的源服务器必须 最终发送最终状态代码,一旦请求正文 接收和处理,除非终止运输 过早连接。
"最终"这个词让我迷失了轨道。服务器在最终状态代码之后发送多个 100 代码是否可能/常见?
如果有人以前遇到过这个问题,可以指出我关于如何使用 libcurl 处理多个 100 响应代码的任何解释吗?
提前致谢
当前规范在 100-continue 上这样说:
100(继续)状态代码表示请求已收到,但尚未被服务器拒绝。 服务器打算在完全收到请求并对其执行操作后发送最终响应。
当请求包含包含100-继续期望,该响应100指示服务器希望接收有效负载体的请求,如中所述第 5.1.1 节. 客户端应继续发送请求并丢弃 100 响应。
如果请求不包含包含 100 个继续期望的 Expect 标头字段,则客户端可以简单地丢弃此临时响应。
我阅读它的方式,它不应该是一个以上的 100 继续响应标头,这就是 libcurl 这样工作的原因。我从未见过这种情况(多个 100 个响应)发生,我已经做了一段时间的 HTTP(我是 curl 的主要开发人员)。要改变这种行为,我希望你需要稍微修补 libcurl 以允许这种情况发生。
它与CURLOPT_FAILONERROR无关。
我怀疑这是因为客户端未正确处理未处理的错误。确保设置CURLOPT_FAILONERROR
标志。
有关更多信息,请参阅此 SO 帖子。