Por que recebo duas opções de redirecimentos ao receber uma resposta 302?
-
24-09-2019 - |
Pergunta
Eu uso o seguinte código:
- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSHTTPURLResponse *)response {
NSLog(@"Received redirect Response: %@ %@", [response allHeaderFields], [NSHTTPURLResponse localizedStringForStatusCode:[response statusCode]]);
return request;
}
Quando recebo um 302 com os seguintes dados do cabeçalho:
< 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
Esta é a saída no console do GDB:
2010-03-03 08: 42: 03.265 MyProg [68106: 207] Recebeu resposta de redirecionamento: (nulo) Erro do servidor 2010-03-03 08: 42: 14.414 MyProg [68106: 207] Redirect Response: {{
Conexão = "Keep-alive";
"Codificação de conteúdo" = gzip;
"Length-comprimento" = 20;
"Content-type" = "text/html; charset = utf-8";
DATE = "Qua, 03 de março de 2010 07:42:10 GMT";
"Keep-alive" = "Timeout = 15, max = 100";
Localização = "<new Location>
";
Server = "LightTPD/1.4.19";
Vary = "aceitar o codificação"; } encontrado
Ao usar o CURL, só recebo uma resposta e tracedump diz o mesmo, então tenho certeza de que o servidor envia apenas um redirecionamento.
Por que esse seletor é chamado duas vezes?
Solução
connection:willSendRequest:redirectResponse:
é chamado antes de cada solicitação, por isso é chamado uma vez na solicitação original, que não foi um redirecionamento, portanto a resposta é nula; Em seguida, é chamado ao carregar o alvo de redirecionamento, onde a resposta é a resposta 302 à solicitação inicial.