Domanda

È possibile impedire al browser di seguire i reindirizzamenti durante l'invio di XMLHttpRequest-s (ovvero per recuperare il codice di stato di reindirizzamento e gestirlo da solo)?

È stato utile?

Soluzione

Non secondo lo standard W3C per l'oggetto XMLHttpRequest (enfasi aggiunta):

  

Se la risposta è un reindirizzamento HTTP:

     
    

Se l'origine dell'URL trasmesso dall'intestazione Posizione è la stessa origine     con l'origine XMLHttpRequest e il     il reindirizzamento non viola l'infinito     precauzioni loop, in modo trasparente     segui il reindirizzamento mentre osservi     le regole dell'evento di richiesta della stessa origine.

  

Erano considerandolo per una versione futura:

  

Questa specifica non include   le seguenti caratteristiche che sono state   considerato per una versione futura di   questa specifica:

     
      
  • Proprietà per disabilitare i seguenti reindirizzamenti;
  •   

ma la latest non menziona più questo.

Altri suggerimenti

La nuova API Fetch supporta diverse modalità di gestione del reindirizzamento : segui , errore e manuale , ma non riesco a trovare un modo per visualizzare il nuovo URL o il codice di stato quando il reindirizzamento ha stato cancellato. Puoi semplicemente interrompere il reindirizzamento stesso e quindi sembra un errore (risposta vuota). Se è tutto ciò di cui hai bisogno, sei a posto. Inoltre, tieni presente che le richieste effettuate tramite questa API non sono annullabili ancora . sono ora.

Come per XMLHttpRequest, puoi HEAD il server e controllare se l'URL è cambiato:

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

Non otterrai il codice di stato, ma troverai il nuovo URL senza scaricare l'intera pagina da esso.

È possibile utilizzare la proprietà responseURL per ottenere la destinazione di reindirizzamento o verificare se la risposta è stata infine recuperata da una posizione accettata.
Questo ovviamente significa che il risultato viene recuperato comunque, ma almeno puoi ottenere le informazioni necessarie sulla destinazione di reindirizzamento e, ad esempio, rilevare le condizioni in cui desideri eliminare la risposta.

No, non c'è nessun posto nell'API esposto da XMLHttpRequest che ti permetta di sovrascrivere il suo comportamento predefinito seguendo automaticamente un 301 o 302.

Se il client esegue IE su Windows, è possibile utilizzare WinHTTP invece di impostare un'opzione per impedire tale comportamento ma questa è una soluzione molto limitante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top