Почему я получаю два redirectResponses при получении одного ответа 302? - PullRequest
2 голосов
/ 03 марта 2010

Я использую следующий код:

- (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;
«Длина содержимого» = 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 сообщает то же самое, поэтому я уверен, что сервер отправляет только одно перенаправление.
Почему этот селектор вызывается дважды?

1 Ответ

3 голосов
/ 12 марта 2010

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

...