HTTPS POST с iPhone с использованием NSURLConnection зависает для определенного диапазона размеров файлов

I ' m с помощью 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] );
5
задан tom 8 December 2010 в 07:10
поделиться