NSURLConnection禁用“太多HTTP重定向”

时间:2011-02-21 15:09:56

标签: iphone redirect nsurlconnection

我目前正在进行许多需要一段时间处理的服务器端计算。

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

这导致“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];

}

1 个答案:

答案 0 :(得分:1)

重定向到相同的网址非常浪费。至少,为“作业”分配一个ID并将其返回给调用应用程序。然后,它可以轮询服务器,传递ID,以查看作业何时完成。你不应该过于频繁地进行民意调查,也许不应该每隔几秒钟进行一次。

您也可以使用单个请求 - 响应。您的服务器只有在拥有数据后才会响应。在iPhone上,默认超时设置为60秒。您的服务器可能能够启动响应(写出一些数据),以便建立连接;但是不要完成&amp;关闭连接,直到处理完成。

最后,如果你做一个简单的请求......长时间的延迟......回应;并期望它将采取&gt; 60秒 - 考虑通过NSMutableURLRequest's setTimeoutInterval延长请求的超时时间。

注意:在您的示例中,您使用的是同步请求。如果您在线程之外执行此操作,则您的应用可能会阻止。如果它阻止&gt; 20秒,它将被看门狗服务杀死。使用asynch方法和委托来捕获响应是非常容易的,所以给它们一个旋转。

最后,如果你使用asynch方法;你可以抓住3xx重定向并自己处理它;但是你知道,你的重定向技术似乎很邪恶,所以不要这样做。