Question

Est-il possible d'empêcher le navigateur de suivre les redirections lors de l'envoi de XMLHttpRequest-s (c'est-à-dire pour récupérer le code d'état de la redirection et le gérer moi-même)?

Était-ce utile?

La solution

Pas selon norme W3C pour l'objet XMLHttpRequest (non souligné dans l'original):

  

Si la réponse est une redirection HTTP:

     
    

Si l'origine de l'URL transmise par l'en-tête Location est identique.     avec l'origine XMLHttpRequest et le     redirection ne viole pas l'infini     précautions de boucle, en transparence     suivez la redirection tout en observant     les règles d'événement de demande de même origine.

  

Ils ont pris en compte pour une version ultérieure:

  

Cette spécification n'inclut pas   les caractéristiques suivantes qui sont en cours   considéré pour une future version de   cette spécification:

     
      
  • Propriété permettant de désactiver les redirections suivants;
  •   

mais la dernière spécification ne le mentionne plus.

Autres conseils

La nouvelle API de récupération prend en charge différents modes de gestion des redirections. : suivez , erreur et manuel , mais je ne parviens pas à afficher le nouvel URL ou le code d'état lorsque la redirection a été annulé. Vous pouvez simplement arrêter la redirection elle-même, et cela ressemble alors à une erreur (réponse vide). Si c'est tout ce dont vous avez besoin, vous êtes prêt à partir. Vous devez également savoir que les demandes effectuées via cette API ne sont pas annulables pour l'instant . . Ils sont maintenant.

Comme pour XMLHttpRequest, vous pouvez HEAD le serveur et vérifier si l'URL a changé:

var http = new XMLHttpRequest();
http.open('HEAD', '/the/url');
http.onreadystatechange = function() {
    if (this.readyState === this.DONE) {
        console.log(this.responseURL);
    }
};
http.send();

Vous n'obtiendrez pas le code d'état, mais vous trouverez la nouvelle URL sans télécharger la page entière.

Vous pouvez utiliser la propriété responseURL pour obtenir la destination de redirection ou vérifier si la réponse a finalement été extraite d'un emplacement que vous avez accepté.
Cela signifie bien sûr que le résultat est quand même recherché, mais vous pouvez au moins obtenir les informations nécessaires sur la destination de redirection et par exemple détecter les conditions dans lesquelles vous souhaitez supprimer la réponse.

Non, il n'y a aucune place dans l'API exposée par XMLHttpRequest qui vous permet de remplacer son comportement par défaut consistant à suivre un 301 ou 302 automatiquement.

Si le client exécute Internet Explorer sur Windows, vous pouvez utiliser WinHTTP à la place pour définir une option permettant d'empêcher ce comportement, mais c'est une solution très limitante.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top