我一直在解决一个问题,即
一些事实:
- 所有URL均为HTTPS,与TLS 1.2兼容,并具有前向保密性。在ATS和iOS 9方面没有任何问题。该错误自iOS 7以来一直存在,并且仍然存在于9.2中。 - 应用程序不使用第三方框架。我仅使用本机的
有了这些信息,是否有人愿意猜测我可能做错了什么?我添加了赏金,因为我不知道如何解决这个问题-特别是因为它非常不一致。而且这绝对不是一个合法的错误(也就是说,域名找不到),因为服务在这种情况下的随机客户端上运行良好。
我使用一个静态方法创建我的请求,看起来像这样。它已剥离了一些非公共信息,但基本上只需使用JSON数据执行POST请求。
NSURLConnection
调用会立即失败。需要完全重新启动设备或切换飞行模式才能解决此问题。仅重新启动应用程序(向上滑动)无法帮助解决问题。一些事实:
- 所有URL均为HTTPS,与TLS 1.2兼容,并具有前向保密性。在ATS和iOS 9方面没有任何问题。该错误自iOS 7以来一直存在,并且仍然存在于9.2中。 - 应用程序不使用第三方框架。我仅使用本机的
NSURLConnection
调用,它们总是有效的,除非出现这种奇怪的情况。
- 没有基础设施/网络问题-同一网络上的其他设备(例如相同的WiFi)同时在同一应用程序中工作。从3G / Wifi转换无任何区别。
- 我总是实现willCacheResponse
以返回nil
。
- 服务托管在AWS Elastic Beanstalk上,因此有人建议可能是DNS缓存问题,如果IP地址更改,则这似乎不太可能,并且应在不同设备上同时触发多个错误,但我从未见过。
- 调用的方法是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];
}