Apache客户端HTTP响应处理状态码HTTP 100

3
我使用Apache HttpDefault客户端,并按以下方式执行POST函数。
HttpResponse imToken = httpClient.execute(httpPostIM);

获取到的响应是:
HTTP/1.1 100 Continue
Connection: keep-alive

接着:

HTTP/1.1 200 OK
Date: Tue, 30 Aug 2011 19:11:35 GMT

我们如何从客户端处理这个问题?

我可以检查100状态码。但如何等待并获取第二个响应。是否有代码片段?我在Apache文档中看到过,但不确定如何实现。为了处理这个问题,一个简单的HTTP 1.1客户端可能会从套接字读取一个响应;如果状态码是100,则丢弃第一个响应并读取下一个响应。 - Kavitha
1个回答

3
这里是w3对100响应的定义,这里有一个很好的响应示例。引用如下:

客户端应该继续它的请求。这个中间响应用于通知客户端已经接收到请求的初始部分,并且尚未被服务器拒绝。客户端应该通过发送请求的其余部分来继续,或者如果请求已经完成,则忽略此响应。在请求完成后,服务器必须发送最终响应。有关使用和处理此状态代码的详细讨论,请参见第8.2.3节。

所以,如果您的客户端已经发送了整个请求,则应等待服务器直到它给出一个200或其他“最终”响应。
根据Apache的HttpClient代码,您不需要做任何事情,因为客户端会忽略所有1XX响应代码并继续寻找最终响应。这是来自commons-httpclient-3.1中的HttpMethodBase类。
if ((status >= 100) && (status < 200)) {
    if (LOG.isInfoEnabled()) {
        LOG.info("Discarding unexpected response: " +
            this.statusLine.toString()); 
    }
    this.statusLine = null;
}

如果您没有看到这种行为,那么也许您需要增加客户端超时时间?也许它等待的时间不够长?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接