一些事实:
– 所有URL均为HTTPS,TLS 1.2与Forward Secrecy兼容. ATS和iOS 9没有问题.自iOS 7以来一直存在错误,并且仍然存在9.2.
应用程序不使用第三方框架.我只使用本机NSURLConnection调用,除非出现这种奇怪的情况.
– 没有基础设施/网络问题 – 同一网络上的其他设备(例如,相同的WiFi)同时在同一个应用程序中工作.来往/来自3G / Wifi没有任何区别.
– 我总是实现willCacheResponse来返回nil.
– 该服务托管在AWS Elastic Beanstalk上,因此一些人建议在IP地址更改时可能是DNS缓存问题 – 这似乎不太可能,并且应该在不同的设备上同时触发多个错误,这是我从未见过的.
– 即时调用的方法是didFailWithError,好像设备上根本没有互联网连接 – 但是所有其他应用程序都可以工作.
– 可以随时浏览承载应用程序使用的API的网站.该网站实际上提出了获取数据的相同请求.
返回的错误代码是-1003,kcfURLErrorCannotFindHost.我一直在关注Git处理相同问题的线程无济于事. https://github.com/AFNetworking/AFNetworking/issues/967
我尝试使用NSURLRequestReloadIgnoringCacheData来处理我的所有请求,但这没有帮助.
有了这些信息,是否有人会冒险猜测我可能做错了什么?我添加了赏金,因为我不知道如何处理这个问题 – 特别是因为它是如此不一致.它绝对不是一个合法的错误(也就是说,无法找到域),因为服务运行正常,而这种情况发生在随机客户端上.
我用一个看起来像这样的静态方法创建我的请求.它被剥夺了一些非公开信息,但基本上它只是用JSON数据执行POST请求. [Controller getsqlHost]只返回一个URL – 基本域.
+(NSURLConnection*)initiatePOSTwithJSONDictionary:(NSDictionary*)dictionary toURL:(NSString*)urllocation withDelegate:delegate { NSMutableDictionary *connectionDictionary = [[NSMutableDictionary alloc] init]; if (dictionary) { [connectionDictionary setObject:dictionary forKey:@"input"]; } NSData *jsonData = [NSJSONSerialization dataWithJSONObject:connectionDictionary options:kNilOptions error:nil]; NSURL *url = [NSURL URLWithString:[[Controller getsqlHost] stringByAppendingString:urllocation]]; NSString *postLength = [NSString stringWithFormat:@"%i",(int)[jsonData length]]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30.0]; [request setHTTPMethod:@"POST"]; [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; [request setHTTPBody:jsonData]; return [[NSURLConnection alloc] initWithRequest:request delegate:delegate]; }