Http请求,用response.getStatusLine().getStatusCode()判断返回值为200,是不是说明对方一定收到请求了?对方是IIS服务器,我的方法已经正确返回200,日志有打印,对方却一直咬定没有收到,我没有接触过IIS服务器,除了这个人以外,别的都没有问题!并且根据对方所说,并不是一直存在类似问题,一天会出现几次,抓包都不好抓!所以想请有遇到过类似问题或有经验丰富的开发帮助分析一下!
迷茫2017-04-18 10:52:12
如果服务端返回200,可以确实服务器成功接收到了客户端请求。你这种情况的话,你可以把服务端返回的报文全部记录到log里,包括报文头信息和报文体信息以及通讯时间。当在此出现这种问题时,根据出现时间找到那条报文,然后拿这条报文与其他报文比较下,看有什么异常没
阿神2017-04-18 10:52:12
首先,要先弄明白什么是 HTTP 200 :
请求已成功,请求所希望的响应头或数据体将随此响应返回。
请求已经被实现,而且有一个新的资源已经依据请求的需要而创建,且其URI已经随Location头信息返回。假如需要的资源无法及时创建的话,应当返回'202 Accepted'。
服务器已接受请求,但尚未处理。正如它可能被拒绝一样,最终该请求可能会也可能不会被执行。在异步操作的场合下,没有比发送这个状态码更方便的做法了。
返回202状态码的响应的目的是允许服务器接受其他过程的请求(例如某个每天只执行一次的基于批处理的操作),而不必让客户端一直保持与服务器的连接直到批处理操作全部完成。在接受请求处理并返回202状态码的响应应当在返回的实体中包含一些指示处理当前状态的信息,以及指向处理状态监视器或状态预测的指针,以便用户能够估计操作是否已经完成。
服务器已成功处理了请求,但返回的实体头部元信息不是在原始服务器上有效的确定集合,而是来自本地或者第三方的拷贝。当前的信息可能是原始版本的子集或者超集。例如,包含资源的元数据可能导致原始服务器知道元信息的超集。使用此状态码不是必须的,而且只有在响应不使用此状态码便会返回200 OK的情况下才是合适的。
其次,你收到200的请求,仅代表服务成功收到,不代表对方的业务代码是否能收到。一般的公司会有防火墙服务,分发服务等网络层,还有的会有业务网关层。
最后,还有检查一下通讯的数据格式。