Я использую NSURLConnection для создания асинхронного HTTPS POST в нашем веб-сервисе для загрузки jpg.Большую часть времени он работает нормально.
Но когда размер тела сообщения составляет от 196609 до 196868 байт (включительно), соединение зависает после того, как файл загружен на 100% (didSendBodyData сообщает, что он отправлен на 100%),Затем через 5 минут истекает время соединения с сообщением «Сетевое соединение потеряно».Большие и меньшие размеры файлов работают.Я проверил это, ограничив размер файла файла, который я добавляю в тело сообщения.
Длина содержимого установлена правильно.См. Код ниже.
Загрузка выглядит нормально, когда я загружаю в netcat через HTTP.Все тело сообщения проходит.Но я подозреваю, что что-то идет не так из-за шифрования SSL, например, он буферизует зашифрованный кадр блока SSL.
Есть ли ошибка в коде SSL iPhone, из-за которой он не загружает весь текст сообщения, даже если он сообщает, чтоэто или что-то еще?
Вот раздел, в котором я устанавливаю длину содержимого и добавляю файл в тело POST, состоящее из нескольких частей.Вы можете видеть, что я ограничиваю размер файла вручную, чтобы проверить.
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:nsurl];
[request setHTTPMethod:@"POST"];
[request setTimeoutInterval:1];
[request addValue:@"close" forHTTPHeaderField: @"Connection"];
// Add headers and POST information
NSLog( @"Posting file." );
NSString *stringBoundary = [NSString stringWithString:@"0xKhTmLbOuNdArY"];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",stringBoundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];
NSMutableData *postBody = [NSMutableData data];
...
[postBody appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"uploadFile\"; filename=\"upload.jpg\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithString:@"Content-Type: image/jpg\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
NSLog( @"file size...%d", [uploadFile length] );
//[postBody appendData:uploadFile];
[postBody appendData:[NSData dataWithBytes: [uploadFile bytes] length: 196099]];
[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:postBody];
[request setValue:[NSString stringWithFormat:@"%d", [postBody length]] forHTTPHeaderField:@"Content-Length"];
NSLog(@"Uploaded POST size: %d", [postBody length] );