如题,我的客户端在4G网络下,在同一个手机上,发送同一个Get请求(参数也相同),到同一个地址(是个域名地址),收到的返回结果不同。操作:iOS发送一个Get请求到后台。iOS客户端:
请求:同一个Get请求
网络:4G
网络请求框架:ASIHttpRequest服务端环境:
两个服务器(服务端用Tomcat部署),由一个nginx代理。客户端通过域名调用后台的服务。正常情况:
能收到结果,并且客户端能够正确解析,得到json。数据类似于:
7b226973 53756363 “中间省略”74227d5d 7d
用下面的方法能够解析出一个json格式的字符串:
NSString *str = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];异常情况:
也能收到服务端的数据,但是数据内容与正常情况下的不同。完整数据如下:
1f8b0800 00000000 0000b552 4d6bdb40 10fd2b65 cfb6b4ab da8dd135 e410684c c1eda90a 652b8f15 a5d24aec aefc8131 b4849494 50da837b 2b18420c be9542a1 10927f53 3beaa97f a1b3b2ec 0adc5ba9 58d0ec9b 796fde0c 3b26a1ea 64be0f4a 1157cb0c 6a245320 893b2efe 82c7405c 0243fdc2 3f01110c 200c322e 02522341 d8252e73 9acd1af9 130532c9 d243bc3a 65bc9f74 8d00ab33 52228fa1 6f00bc46 5ce902da 1618e4c0 2f29143f 87d20daf bdb6929f ddad6e3e 2e2fdefe 9cbec694 b15c66ee 17973f6e 67cbf377 08c3ae88 9fc42917 a35d0935 521a6233 03ad1199 448637d4 a3811c51 4626d822 2ce41dca 1ed569a3 eeb41eb0 86dbd8c3 83e43879 1946b0df 0b88fb7c 4c5e81d1 3f2ab023 9e62becf a3ccb04f b44e5dcf f66c1022 95c929f8 3ab130b6 7ce1b628 c23da478 76299788 5e1898ea ad94358c 2334b369 f15472a1 9e70c963 f5ef4d2a 62eb36c7 b894cd9b e8f148e1 a388154e 4856b379 fee5ea7e ba585d7c cf3f7c5e beffb4bc fe9a7f9b ffba7d63 1609b21f 22abb28a 36e80ea2 f8a0fee2 92518b59 cd3dcb79 48d15e8b 797667ad 70208250 a051094a 7bf646d6 b3b76ad5 092b5b79 86a5ffbf ddf1e437 ddce9093 35030000
这个异常数据,用上面提到的解析方法,得到解析错误“未能读取数据,因为它的格式不正确。”。重现步骤:
目前没有找到稳定的重现步骤。同一个手机,有时正常,有时异常。
重启手机,或切换网络(有时连4G,有时用WIFI),重现的几率大些。以上是我能提供的客观的描述。分析:
1. 感觉像是网络变换(如4G与WIFI之间的切换)或手机重启后,手机的网络相关信息(如IP)发生变化,从而导致不能收到正确的数据。
2. 异常情况下的数据,前几个字节是1f8b0800。查了下是gzipz的文件头。但是为什么会返回这样的数据,我没有找到原因。
3. 看了服务端日志,没看到相关的异常信息。请各位帮忙提供经验和思路。谢谢大家的时间。