2

Я использую следующий код:Почему я получаю два redirectResponses при получении одного ответа 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) Ошибка сервера 2010-03-03 08: 42: 14.414 MyProg [68106: 207] Получено перенаправление Ответ: {
Connection = "Keep-Alive";
"Content-Encoding" = gzip;
"Content-Length" = 20;
"Content-Type" = "text/html; charset = utf-8";
Дата = "ср, 03 мар 2010 07:42:10 GMT";
«Keep-Alive» = «timeout = 15, max = 100»;
Местонахождение = "<new Location>";
Сервер = "lighttpd/1.4.19";
Vary = "Accept-Encoding"; } найдено

При использовании Curl я получаю только один ответ, и tracedump сообщает то же самое, поэтому я уверен, что сервер отправляет только одно перенаправление.
Почему этот селектор называется дважды?

+0

Я обнаружил, что при проверке запроса, в первом вызове вы получите первоначальный запрос и во втором вызове пустого HTTPBody со следующим HTTPHeader: (GDB) Ро [запрос allHTTPHeaderFields] { Accept = «*/* "; "Accept-Encoding" = "gzip, deflate"; «Accept-Language» = «en-us»; } – maxbareis

ответ

3

connection:willSendRequest:redirectResponse: вызывается перед каждым запросом, поэтому он вызывается один раз в исходном запросе, который не был перенаправлен, поэтому ответ равен нулю; то он вызывается при загрузке цели перенаправления, где ответ представляет собой ответ 302 на исходный запрос.

Смежные вопросы