Iphone NSURLConnection disable";“HTTP重定向太多”;

Iphone NSURLConnection disable";“HTTP重定向太多”;,iphone,redirect,nsurlconnection,Iphone,Redirect,Nsurlconnection,我目前正在做许多服务器端计算,这些计算需要一段时间来处理 同时,我将用户重定向到同一页面,直到它有响应为止 这将导致“太多HTTP重定向”错误。有没有办法禁用它,或者提高它的阈值 这发生在模拟器和电话上 以下是相关代码: //Define request NSURLRequest *request = [requestGenerator theRequest]; // Execute URL and read response NSError *error = nil; NSHTTP

我目前正在做许多服务器端计算,这些计算需要一段时间来处理

同时,我将用户重定向到同一页面,直到它有响应为止

这将导致“太多HTTP重定向”错误。有没有办法禁用它,或者提高它的阈值

这发生在模拟器和电话上

以下是相关代码:

//Define request

NSURLRequest *request = [requestGenerator theRequest];



// Execute URL and read response

NSError *error = nil;

NSHTTPURLResponse *httpResponse;

NSData *resp = [NSURLConnection sendSynchronousRequest:request returningResponse:&httpResponse error:&error];



 //If we get a good response

if(resp != nil && httpResponse != NULL && [httpResponse statusCode] >= 200 && [httpResponse statusCode] < 300)

{

   ... 

}



if (error) {

  [self  showErrorMessage:error];

}
//定义请求
NSURLRequest*request=[RequestGeneratorTheRequest];
//执行URL并读取响应
n错误*错误=nil;
NSHTTPURLResponse*httpResponse;
NSData*resp=[NSURLConnection sendSynchronousRequest:request returningResponse:&httpResponse错误:&error];
//如果我们得到好的回应
如果(resp!=nil&&httpResponse!=NULL&&httpResponse statusCode]>=200&&httpResponse statusCode]<300)
{
... 
}
如果(错误){
[自我信息:错误];
}

重定向到同一个URL是非常浪费的。至少,为“作业”分配一个ID并将其返回给呼叫应用程序。然后,它可以轮询服务器,传递ID,以查看作业何时完成。你不应该太频繁地投票,也许每隔几秒钟就投票一次

您也可以只使用一个请求-响应。您的服务器在获得数据之前不会响应。在iPhone上,默认超时设置为60秒。您的服务器可能能够启动响应(写出一点数据),以便建立连接;但在处理完成之前不要完成并关闭连接

最后,如果你做一个简单的请求。。。长时间延迟。。。反应;并预期它将花费60秒-考虑通过I/P>延长请求的超时时间。 注意:在您的示例中,您使用的是同步请求。如果您在线程之外执行此操作,您的应用程序可能会被阻止。如果它阻塞时间超过20秒,它将被看门狗服务杀死。对委托使用异步方法来捕获响应非常容易,所以请尝试一下


最后,如果您使用异步方法;您可以捕获3xx重定向并自行处理;但是你知道,你的重定向技术看起来很邪恶,所以不要这样做。

如果页面不是供最终用户显示的,那么为什么要继续重定向?难道你不能从服务器上发送一个200,然后在它准备好时呈现其余的响应吗?此外,你建议的方法会产生不必要的网络流量,这在iPhone上是最好避免的,出于显而易见的原因。ps:如果您返回一个“作业id”,那么您的服务器将需要保留作业结果,直到客户端回调以获取它为止。您还需要在服务器上执行一个清理任务,该任务将删除旧的和被遗忘的作业。