Est-il possible d'empêcher le navigateur de suivre les redirections lors de l'envoi de XMLHttpRequest-s (c'est-à-dire de récupérer le code d'état de la redirection et de le gérer moi-même)?
112
Est-il possible d'empêcher le navigateur de suivre les redirections lors de l'envoi de XMLHttpRequest-s (c'est-à-dire de récupérer le code d'état de la redirection et de le gérer moi-même)?
Pas selon la norme W3C pour l'objet XMLHttpRequest (emphase ajoutée):
Si la réponse est une redirection HTTP:
Si l'origine de l'URL véhiculée par l'en-tête Location est la même origine que l'origine XMLHttpRequest et que la redirection ne viole pas les précautions de boucle infinie, suivez de manière transparente la redirection tout en observant les règles d'événement de demande de même origine.
Ils l' envisageaient pour une future version:
Cette spécification n'inclut pas les fonctionnalités suivantes qui sont envisagées pour une future version de cette spécification:
- Propriété pour désactiver les redirections suivantes;
mais la dernière spécification ne le mentionne plus.
La nouvelle Fetch API supports différents modes de traitement des redirect:
follow
,error
etmanual
, mais je ne peux pas trouver un moyen de voir la nouvelle URL ou le code d'état lorsque la redirection a été annulée. Vous pouvez simplement arrêter la redirection elle-même, puis cela ressemble à une erreur (réponse vide). Si c'est tout ce dont vous avez besoin, vous êtes prêt à partir.Sachez également que les demandes effectuées via cette API ne sont pas encore annulables .Ils le sont maintenant.Comme pour XMLHttpRequest, vous pouvez
HEAD
le serveur et vérifier si l'URL a changé:Vous n'obtiendrez pas le code d'état, mais vous trouverez la nouvelle URL sans télécharger la page entière à partir de celle-ci.
la source
OPTIONS
peut être un meilleur choix, de toute façon ne fonctionne qu'à des fins non générales, etc. l'administrateur avait configuré la redirection de tout le site / schéma, tel que HTTP -> HTTPSVous pouvez utiliser la
responseURL
propriété pour obtenir la destination de la redirection ou vérifier si la réponse a finalement été extraite d'un emplacement que vous acceptez.Cela signifie bien sûr que le résultat est récupéré de toute façon, mais au moins vous pouvez obtenir les informations nécessaires sur la destination de la redirection et, par exemple, détecter les conditions lorsque vous souhaitez ignorer la réponse.
la source
Non, il n'y a pas de place dans l'API exposée par XMLHttpRequest qui vous permet de remplacer son comportement par défaut de suivre automatiquement un 301 ou 302.
Si le client exécute IE sur Windows, vous pouvez utiliser WinHTTP à la place pour définir une option pour empêcher ce comportement, mais c'est une solution très limitative.
la source