为什么在收到一个302响应时会收到两个redirectResponses?

时间:2010-03-03 08:07:05

标签: cocoa nsurlconnection httpresponse http-status-code-302

我使用以下代码:

- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSHTTPURLResponse *)response {
NSLog(@"Received redirect Response: %@ %@", [response allHeaderFields], [NSHTTPURLResponse localizedStringForStatusCode:[response statusCode]]);
return request;
}

当我收到带有以下标题数据的302时:

< HTTP/1.1 302 Found  
< Date: Wed, 03 Mar 2010 07:47:17 GMT  
< Server: lighttpd/1.4.19  
< Content-length: 0  
< Content-type: text/html;charset=utf-8  
< Location: `<new Location>`  
< Vary: Accept-Encoding  

这是gdb控制台中的输出:

  

2010-03-03 08:42:03.265 MyProg [68106:207]收到重定向响应:   (null)server error 2010-03-03 08:42:14.414 MyProg [68106:207]   收到重定向响应:{
      连接=“保持活跃”;
      “Content-Encoding”= gzip;
      “内容长度”= 20;
      “Content-Type”=“text / html; charset = utf-8”;
      Date =“Wed,03 Mar 2010 07:42:10 GMT”;
      “Keep-Alive”=“timeout = 15,max = 100”;
      位置=“<new Location>”;
      Server =“lighttpd / 1.4.19”;
      Vary =“Accept-Encoding”;找到了

使用Curl时,我只得到一个响应,tracedump也是这样,所以我确信服务器只发送一个重定向。
为什么这个选择器被调用两次?

1 个答案:

答案 0 :(得分:3)

在每个请求之前调用

connection:willSendRequest:redirectResponse:,因此在原始请求上调用它一次,这不是重定向,因此响应为零;然后在加载重定向目标时调用它,其中响应是对初始请求的302响应。