Verhindern, dass die Umleitung von XMLHttpRequest
-
03-07-2019 - |
Frage
Ist es möglich, den Browser zu verhindern, dass Umleitungen folgenden wenn XMLHttpRequest-s sendet (das heißt die Umleitung Statuscode zurück zu bekommen und zu handhaben es selbst)?
Lösung
Nicht nach der W3C-Standard für das XMLHttpRequest-Objekt (Hervorhebung hinzugefügt):
Wenn die Antwort eine HTTP-Umleitung:
Wenn der Ursprung der von den Location-Header übermittelt URL gleicher Ursprung mit dem XMLHttpRequest Ursprung und die Umleitung nicht unendlich verletzen Schleife Vorsichtsmaßnahmen, transparent folgen Sie der Umleitung unter Beobachtung die gleiche Ursprungsanforderung Ereignisregeln.
Sie waren es für eine zukünftige Version Berücksichtigung
Diese Spezifikation umfasst nicht die folgenden Merkmale auf, die sein, sind als für eine zukünftige Version von diese Spezifikation:
- Property folgende Umleitungen zu deaktivieren;
aber die neueste Spezifikation nicht mehr erwähnt dies.
Andere Tipps
Der neue API Fetch verschiedenen Modi der Umleitung Handhabung unterstützt : follow
, error
und manual
, aber ich kann die neue URL oder den Statuscode anzuzeigen, wenn die Umleitung abgebrochen wurde nicht einen Weg finden. Sie können nur die Umleitung selbst, stoppen und dann sieht es aus wie ein Fehler (leer Antwort). Wenn das alles, was Sie brauchen, sind Sie gut zu gehen. Auch Sie sollten sich bewusst sein, dass die Anfragen über diese API gemacht sind nicht stornierbar noch . Sie sind jetzt.
Wie für XMLHttpRequest, können Sie den Server HEAD
und überprüfen, ob die URL geändert hat:
var http = new XMLHttpRequest();
http.open('HEAD', '/the/url');
http.onreadystatechange = function() {
if (this.readyState === this.DONE) {
console.log(this.responseURL);
}
};
http.send();
Sie werden nicht den Statuscode bekommen, werden aber die neue URL finden, ohne dass die ganze Seite aus dem Download.
Sie können responseURL
Eigenschaft verwenden, um die Umleitung Ziel zu gelangen oder überprüfen, ob die Antwort von einem Ort schließlich geholt wurden Sie akzeptieren.
Das bedeutet natürlich das Ergebnis geholt wird sowieso, aber zumindest können Sie die notwendigen Informationen über die Umleitung Ziel gelangen und zum Beispiel Bedingungen erkennen, wenn Sie möchten, um die Antwort verwerfen.
Nein, Sie gibt es keinen Platz in der von XMLHttpRequest ausgesetzt API, die Sie seine Standardverhalten automatisch nach einer 301 oder 302 außer Kraft setzen können.
Wenn der Client IE auf Windows läuft, dann können Sie WinHTTP verwenden stattdessen eine Option zu setzen, dass das Verhalten zu verhindern, aber das ist eine sehr einschränkende Lösung.