Embora as outras pessoas que responderam a esta pergunta estejam (infelizmente) corretas ao afirmar que essas informações são ocultadas de nós pelo navegador, pensei em postar uma solução alternativa que descobri:
Eu configurei meu aplicativo de servidor para definir um cabeçalho de resposta personalizado ( X-Response-Url
) contendo o url que foi solicitado. Sempre que meu código ajax recebe uma resposta, ele verifica se xhr.getResponseHeader("x-response-url")
está definido e, nesse caso, o compara com a url por meio da qual ele solicitou originalmente $.ajax()
. Se as strings forem diferentes, eu sei que houve um redirecionamento e, além disso, a qual url realmente chegamos.
Isso tem a desvantagem de exigir alguma ajuda do servidor e também pode falhar se o url for bloqueado (devido a problemas de cotação / codificação, etc.) durante a viagem de ida e volta ... mas para 99% dos casos, isso parece o trabalho feito.
No lado do servidor, meu caso específico foi um aplicativo python usando a estrutura da web Pyramid, e usei o seguinte snippet:
import pyramid.events
@pyramid.events.subscriber(pyramid.events.NewResponse)
def set_response_header(event):
request = event.request
if request.is_xhr:
event.response.headers['X-Response-URL'] = request.url