Si bien las otras personas que respondieron esta pregunta tienen (lamentablemente) razón en que el navegador nos oculta esta información, pensé en publicar una solución alternativa que se me ocurrió:
Configuré mi aplicación de servidor para establecer un encabezado de respuesta personalizado ( X-Response-Url
) que contiene la URL solicitada. Siempre que mi código ajax recibe una respuesta, comprueba si xhr.getResponseHeader("x-response-url")
está definido, en cuyo caso lo compara con la URL que solicitó originalmente a través de $.ajax()
. Si las cadenas difieren, sé que hubo una redirección y, además, a qué URL llegamos realmente.
Esto tiene el inconveniente de requerir algo de ayuda del lado del servidor, y también puede fallar si la URL se manipula (debido a problemas de citación / codificación, etc.) durante el viaje de ida y vuelta ... pero para el 99% de los casos, esto parece funcionar el trabajo hecho.
En el lado del servidor, mi caso específico fue una aplicación de Python que usa el marco web Pyramid, y usé el siguiente fragmento:
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