我使用以下代码:
- (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也是这样,所以我确信服务器只发送一个重定向。
为什么这个选择器被调用两次?
答案 0 :(得分:3)
connection:willSendRequest:redirectResponse:
,因此在原始请求上调用它一次,这不是重定向,因此响应为零;然后在加载重定向目标时调用它,其中响应是对初始请求的302响应。