O que acontece se o navegador receber uma resposta de redirecionamento para uma solicitação ajax?
Se o servidor enviar um redirecionamento (também conhecido como resposta 302 mais um cabeçalho Location:), o redirecionamento será automaticamente seguido pelo navegador. A resposta à segunda solicitação (assumindo que também não é outro redirecionamento) é o que está exposto ao seu programa.
De fato, você não tem a capacidade de detectar se uma resposta 302 ocorreu. Se o redirecionamento 302 levar a um 200, seu programa atuará de forma idêntica como se a solicitação original levasse diretamente a um 200.
Curiosamente, cheguei a isso porque estou enfrentando uma situação em que o redirecionamento aparentemente não está sendo seguido ... isso acontece quando o redirecionamento viola a mesma política de origem.
Gus
4
@Gus, o que provavelmente é lógico #
Dmitry
1
No caso de um redirecionamento para um 401 (ou qualquer erro 4xx ou 5xx), eu assumiria que seu programa se comportaria como se a solicitação levasse diretamente a um 401. Não é isso que você está vendo?
Atualização de 2019: fetch não funciona como esperávamos há 3 anos):
lcjury
7
O ajax-requestseguirá que redirecionar afaik. O conteúdo real ( .responseText, .responseXML) será o conteúdo da página para a qual você é redirecionado.
Você pode interceptar o redirecionamento ( status-code, location-header) em readyState2 ou 3, mas não tem certeza.
Respostas:
O que acontece se o navegador receber uma resposta de redirecionamento para uma solicitação ajax?
Se o servidor enviar um redirecionamento (também conhecido como resposta 302 mais um cabeçalho Location:), o redirecionamento será automaticamente seguido pelo navegador. A resposta à segunda solicitação (assumindo que também não é outro redirecionamento) é o que está exposto ao seu programa.
De fato, você não tem a capacidade de detectar se uma resposta 302 ocorreu. Se o redirecionamento 302 levar a um 200, seu programa atuará de forma idêntica como se a solicitação original levasse diretamente a um 200.
Essa foi minha experiência e o comportamento mencionado nas especificações .
Atualização de 2016: o tempo passou e a boa notícia é que a nova API fetch () deve oferecer um controle mais refinado de como os redirecionamentos são tratados , com comportamento padrão semelhante ao XHR. Dito isto, ele só funciona onde fetch () é implementado nativamente . As versões do polyfill do fetch () - que são baseadas no XHR - continuam com as limitações do XHR . Felizmente, o suporte nativo ao navegador parece estar bem completo.
fonte
O
ajax-request
seguirá que redirecionar afaik. O conteúdo real (.responseText
,.responseXML
) será o conteúdo da página para a qual você é redirecionado.Você pode interceptar o redirecionamento (
status-code
,location-header
) emreadyState
2 ou 3, mas não tem certeza.fonte
getAllResponseHeaders()
é igual.