Bien que les autres personnes ayant répondu à cette question aient (malheureusement) raison de dire que cette information nous est cachée par le navigateur, j'ai pensé poster une solution de contournement que j'ai trouvée :
J'ai configuré mon application serveur pour définir un en-tête de réponse personnalisé ( X-Response-Url
) contenant l'url qui a été demandée. Chaque fois que mon code ajax reçoit une réponse, il vérifie si xhr.getResponseHeader("x-response-url")
est défini, auquel cas il le compare à l'url qu'il a demandé à l'origine via $.ajax()
. Si les chaînes diffèrent, je sais qu'il y a eu une redirection, et en plus, je sais à quelle url nous sommes arrivés.
Cette méthode a l'inconvénient de nécessiter une aide côté serveur, et peut aussi tomber en panne si l'url est tronquée (à cause de problèmes de citation/encodage, etc.) pendant le trajet aller-retour... mais dans 99 % des cas, cela semble faire l'affaire.
Du côté serveur, mon cas spécifique était une application python utilisant le framework web Pyramid, et j'ai utilisé le snippet suivant :
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
0 votes
Dans mon cas particulier, j'attends une réponse JSON sur succès et la réponse HTML s'il y a eu une redirection vers une page de connexion. J'ai fini par vérifier si
xhr.getResponseHeader("content-type")
commence partext/html
et contient un mot clé tel que "login" et affiche un "your session has timed out" si nécessaire. Bien sûr, ce n'est pas vraiment une réponse mais une solution de contournement.