【问题标题】:NSURLConnection sendAsynchronousRequest: Long run on httpsNSURLConnection sendAsynchronousRequest:在 https 上长时间运行
【发布时间】:2012-04-15 17:41:17
【问题描述】:

我现在正在尝试将某些服务器 API 调用从 http 切换到 https,但我遇到了一个我无法向自己解释的问题。

从 http 切换到 https 后,我发现我的异步请求需要 60 秒才能完成,尽管服务器已经处理了请求。

没有抛出错误,没有发生超时或类似的事情,似乎需要整整 60 秒才能注意到请求已完成。然后,在 60 秒后,它就按照它的意图去做了。

这就是我正在做的:

NSString *theBody = @"param1=value1&param2=value2";
NSData *bodyData = [theBody dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSURL *url = [NSURL URLWithString:@"https://my.api.server.com/call"];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] initWithURL:url] autorelease];

[request setValue:@"My User-Agent" forHTTPHeaderField:@"User-Agent"];
// Tested this one, too. Yes, I did set to utf8 encoding when trying this
// [request setValue:@"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:bodyData];
// testing only
// [request setTimeoutInterval:15];

[NSURLConnection sendAsynchronousRequest:request 
                                   queue:[NSOperationQueue mainQueue]
                       completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
                           NSLog(@"Finished!");
                       }];

60 秒后抛出日志消息。在输出日志消息之前刷新相应的数据时,我可以看到一切都已经发生了——我可以正确拉取刷新的数据。

我已经认为是我的服务器响应时间过长,但我已经尝试使用 Ruby 作为快速测试运行相同的请求并且它工作正常。

有人知道这里会发生什么吗?

提前致谢

阿恩

【问题讨论】:

  • 当您发布到另一台服务器时会发生什么?只是为了测试?在 https 上发布到谷歌……我猜你的服务器有故障
  • 你可能是对的。但是有一个有趣的事实:当请求不成功时,它会起作用。好吧,至少它不需要 60 秒,而是立即返回。我在我的服务器上返回一个 JSON 响应。如果调用成功,它会返回代码 201(实体创建成功)和对象的 JSON。如果不成功,则返回代码 4xx 和带有错误消息的 JSON。错误立即生效,成功需要 NSURLConnection 60 秒才能完成 - 但在此持续时间后它会正确完成。
  • 我刚刚尝试再次使用委托而不是块,现在我得到了这个工作。但这怎么可能呢? 201 不被识别为响应代码是 iOS 5.1 中的错误吗?无法解释……有什么想法吗?
  • Aaand 整个事情又回来了。它不工作。正在调用 didReceiveData,但 didFinishLoading 需要 60 秒才能完成。我会用新数据更新我的帖子。

标签: objective-c ios https nsurlconnection nsurlrequest


【解决方案1】:

实际上似乎是服务器问题。我通过设置修复它

keepalive_timeout 0

在我的 nginx 的配置文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    相关资源
    最近更新 更多