Сетевое соединение было потеряно - Ошибка Домена = kCFErrorDomainCFNetwork Code = -1005 - в ответе GET - PullRequest
0 голосов
/ 04 июня 2018

Я получаю эту ошибку только в запросе GET.На стороне сервера у нас есть Apache HTTP Server, который управляет запросами и ответами Tomcat.

Есть два клиента Android и iOS.Все в приложении Android работает отлично.С другой стороны, в приложении iOS все ответы POST в порядке, проблема только в ответах GET.

Я отслеживал запросы, все они получены в приложении на стороне сервера и касаются журналов,сервер отправляет ответ клиенту, но клиент не получил никакого ответа.

Ни одно из ЭТИХ решений не сработало для моего случая.

Часть моего кода:

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
manager.responseSerializer = [[AFHTTPResponseSerializer alloc] init];
NSData *data = [request.Data dataUsingEncoding:NSUTF8StringEncoding];
NSString *length = [NSString stringWithFormat:@"%lu", [data length]];
NSMutableURLRequest *urlRequest = [PagingManager makeURLRequest:length andUrl:_url];
[urlRequest setHTTPMethod:@"GET"];
NSArray *arr = [request.Data componentsSeparatedByString:@" "];
NSString *session = [PagingManager normalizeGetRequest:arr[0]];
NSString *query = [PagingManager normalizeGetRequest:arr[1]];
NSString *getReq = [NSString stringWithFormat:@"?s=%@&q=%@", session, query];
NSURL *getURL = [NSURL URLWithString:[_url concat:getReq]];
urlRequest.URL = getURL;
NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:urlRequest uploadProgress:nil downloadProgress:nil completionHandler:^
(NSURLResponse *response, id responseObject, NSError *error) {
    if (error) {
        DDLogError(@"ERROR: %@, reason: %@", @"connection failed with error", [error debugDescription]);

        NSString *const TIMEOUT = @"TimeOut";
        NSException *p = [[NSException alloc] initWithName:EXExceptionOnExchangeClientConnectionFail
                                                    reason:(error.code == NSURLErrorTimedOut) ? TIMEOUT : [error localizedDescription]
                                                  userInfo:nil];
        EXExchangeExceptionEventArgs *eventArgs = [[EXExchangeExceptionEventArgs alloc] initWithRequest:_request andError:p];
        [self exchangeException:eventArgs];

        _isRunning = NO;

    } else {
        NSString *responseString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
        NSData *decryptData = [[IOCryptographer Current] asDataDecryptString:responseString];
        if (_request.ReqMethod == GET) {
            DDLogDebug(@"Cache-Control Max-Age : %@", ((NSHTTPURLResponse *) response).allHeaderFields[@"Cache-Control"]);
            DDLogDebug(@"All header of response in GET : %@", ((NSHTTPURLResponse *) response).allHeaderFields);
            DDLogDebug(@"response: %@  and responseObject: %@", response, responseObject);

            NSCachedURLResponse *cachedURLResponse = [[NSCachedURLResponse alloc] initWithResponse:response data:decryptData];
            [NSURLCache.sharedURLCache storeCachedResponse:cachedURLResponse forRequest:cacheRequest];
        } else {
            DDLogDebug(@"All header of response in POST : %@", ((NSHTTPURLResponse *) response).allHeaderFields);
        }

        [_dataStream appendData:decryptData];
        [self connectionDidFinishLoadingWithData:responseString];
    }
}];

[dataTask resume];

И журнал моего приложения:

2018-06-04 12: 41: 22.871344 + 0430 AppName [53990: 2111182] Статус чтения TIC [4:0x60800016ec40]: 1:57 2018-06-04 12: 42: 27.006807 + 0430 AppName [53990: 2112128] Статус чтения TIC [5: 0x60c000170500]: 1:57 2018-06-04 12: 42: 47.084334 + 0430 AppName [53990: 2112128] Состояние чтения TIC [6: 0x60c00016f000]: 1:57 2018-06-04 12: 42: 47.085662 + 0430 AppName [53990: 2112128] Задача <87C4E404-57AF-47F2-A102-D516D6D9BB67>. <1>Ошибка загрузки HTTP (код ошибки: -1005 [4: -4]) 2018-06-04 12: 42: 47.085935 + 0430 AppName [53990: 2112202] Задача <87C4E404-57AF-47F2-A102-D516D6D9BB67>. <1>Конецредактирование с ошибкой - код: -1005 2018-06-04 12: 42: 47.087246 + 0430 AppName [53990: 2112202] [ОШИБКА] 2018-06-04T12: 42: 47: 086 поток: [2110090] класс: [EXExchangeClient]Метод: [- [EXExchangeClient handleAsync: andMode:] _ block_invoke @ 118] описание: []: ОШИБКА: соединение не установлено с ошибкой, причина: Ошибка Domain = NSURLErrorDomain Code = -1005 "Сетевое соединение было потеряно."UserInfo = {NSUnderlyingError = 0x60c00025c0e0 {Домен ошибки = kCFErrorDomainCFNetwork Code = -1005 "(ноль)" UserInfo = {_ kCFStreamErrorCodeKey = -4, _kCFStreamErrorDomainKey = 4}}, URL-адрес_сайта = URL-адрес_сайтаNSErrorFailingURLKey = https://{App URL} /? S = {идентификатор сеанса}, _kCFStreamErrorDomainKey = 4, _kCFStreamErrorCodeKey = -4, NSLocalizedDescription = Сетевое соединение было потеряно.} [ОШИБКА] 2018-06-04T12: 42: 47: 086 поток:[2110090] класс: [EXExchangeClient] метод: [- [EXExchangeClient handleAsync: andMode:] _ block_invoke @ 118] описание: []: ОШИБКА: соединение не установлено с ошибкой, причина: ошибка Домен = NSURLErrorDomain Code = -1005 "Сетевое соединение былопотерял."UserInfo = {NSUnderlyingError = 0x60c00025c0e0 {Домен ошибки = kCFErrorDomainCFNetwork Code = -1005 "(null)" UserInfo = {_ kCFStreamErrorCodeKey = -4, _kCFStreamErrorDomainKey = 4}}, URL-адрес_сайта_сайта: NSErrorNSErrorFailingURLKey = https://{App URL} /? S = {идентификатор сеанса}, _kCFStreamErrorDomainKey = 4, _kCFStreamErrorCodeKey = -4, NSLocalizedDescription = Сетевое соединение было потеряно.} [ОШИБКА] 2018-06-04T12: 42: 47: 099 поток:[2110090] класс: [EXSession] метод: [- [EXSession onExchangeException:] @ 159] описание: []: ОШИБКА: сетевое соединение было потеряно.2018-06-04 12: 42: 47.100285 + 0430 AppName [53990: 2112202] [ОШИБКА] 2018-06-04T12: 42: 47: 099 поток: [2110090] класс: [EXSession] метод: [- [EXSession onExchangeException:] @ 159] описание: []: ОШИБКА: сетевое соединение потеряно.[DEBUG] 2018-06-04T12: 42: 47: 100 поток: [2110090] класс: [EXSession] метод: [- [EXSession goRequestExchangeException:] @ 346] описание: []: Exchange Ended 2018-06-04 12:42: 47.101545 + 0430 AppName [53990: 2112372] [DEBUG] 2018-06-04T12: 42: 47: 100 поток: [2110090] класс: [EXSession] метод: [- [EXSession goRequestExchangeException:] @ 346] описание: []: Exchange Ended [ОШИБКА] 2018-06-04T12: 42: 47: 100 поток: [2110090] класс: [EXSession] метод: [- [EXSession goRequestExchangeException:] @ 348] описание: []: SERVER-ERROR: Theсетевое соединение было потеряно.2018-06-04 12: 42: 47.102801 + 0430 AppName [53990: 2112372] [ОШИБКА] 2018-06-04T12: 42: 47: 100 поток: [2110090] класс: [EXSession] метод: [- [EXSession goRequestExchangeException:] @ 348] description: []: SERVER-ERROR: сетевое соединение потеряно.

Я полагаю, эта проблема возникает из-за Apache.

Есть ли решение этой проблемы?Спасибо за помощь.

1 Ответ

0 голосов
/ 07 июля 2018

Наконец, через 3 недели я нашел решение.мы устанавливаем «Content-length» в заголовок, а Apache (WWW) удаляет запрос, который его имеет.Таким образом, я удалил этот заголовок, и теперь все отлично работает:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...