2008-10-23 13 views

Odpowiedz

84

Nie według the W3C standard for the XMLHttpRequest object (podkreślenie dodane):

Jeśli odpowiedź jest przekierowanie HTTP:

Jeśli pochodzenie URL wywieranym przez nagłówek Location to samo pochodzenie z XMLHttpRequest origin i przekierowanie nie naruszają nieskończonych zabezpieczeń pętli, przezroczyście postępuj zgodnie z przekierowaniem podczas obserwowania reguły zdarzeń tego samego pochodzenia.

Byli considering go dla przyszłych wersjach:

Ta specyfikacja nie zawiera następujące funkcje, które są uważane za przyszłej wersji ta specyfikacja:

  • Właściwość do wyłączenia następujących przekierowań;

ale specyfikacja latest nie wspomina o tym.

+4

Co jest niedorzeczne, gdy przezroczyste przekierowanie obejmuje zastąpienie niektórych nagłówków HTTP, które zostały ustawione w pierwotnym żądaniu. W szczególności, jeśli nagłówek "Accept" został ustawiony na określony typ zawartości, Firefox nie umieści tego nagłówka podczas wykonywania przekierowania (co sprawia, że ​​trudniej jest opracować w pełni usługi sieci Web oparte na REST, które używają tego nagłówka ... narzekać). – ruquay

+1

Trochę więcej poszukiwań przyniosło mi ten dość stary raport o błędzie: https://bugzilla.mozilla.org/show_bug.cgi?id=401564 – ruquay

+1

Zgadzam się, wada całkowicie rediculus. – Rasive

11

Nie ma ciebie, nie ma żadnego miejsca w API narażone przez XMLHttpRequest, który pozwala na przesłonięcie domyślnego zachowania automatycznego 301 lub 302.

Jeśli klient uruchamia program IE w systemie Windows, można zamiast niego użyć opcji WinHTTP, aby zablokować to zachowanie, ale jest to bardzo ograniczające rozwiązanie.

12

Możesz użyć właściwości responseURL, aby uzyskać miejsce docelowe przekierowania lub sprawdzić, czy odpowiedź została ostatecznie pobrana z zaakceptowanej przez Ciebie lokalizacji.
To oczywiście oznacza, że ​​wynik jest pobrany, ale przynajmniej możesz uzyskać niezbędne informacje na temat miejsca docelowego przekierowania i na przykład określić warunki, w których chcesz odrzucić odpowiedź.

19

Nowy Fetch API obsługuje różne tryby postępowania przekierowania: follow, error, a manual, ale nie mogę znaleźć sposób, aby zobaczyć nowy adres URL lub kod statusu przekierowania, gdy został odwołany. Wystarczy zatrzymać sam przekierowanie, a następnie wygląda na błąd (pusta odpowiedź). Jeśli to wszystko, czego potrzebujesz, jesteś dobry. Należy również pamiętać, że żądania przesłane za pośrednictwem tego interfejsu API nie podlegają anulowaniu yet. Teraz są teraz are.

Jak dla XMLHttpRequest można HEAD serwer i sprawdzić, czy adres URL nie zmieniło:

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

Nie dostaniesz kod stanu, ale znajdzie nowy adres URL bez pobierania całej strony od to.

+0

Czasami użycie opcji "OPCJE" może być lepszym wyborem, zresztą działa tylko w ogólnym celu itp. Administrator skonfigurował przekierowanie całej witryny/schematu, na przykład HTTP -> HTTPS –

Powiązane problemy