Відповіді:
Не відповідно до стандарту W3C для об'єкта XMLHttpRequest (наголос додано):
Якщо відповідь перенаправлення HTTP:
Якщо джерело URL-адреси, що передається заголовком Location, є однаковим з початком XMLHttpRequest і переспрямування не порушує нескінченних запобіжних циклів, прозоро дотримуйтесь переспрямування , дотримуючись правил однакового запиту події запиту.
Вони розглядали це щодо майбутнього випуску:
Ця специфікація не включає такі функції, які розглядаються для майбутньої версії цієї специфікації:
- Властивість відключити наступні переадресації;
але остання специфікація вже не згадує про це.
Новий Fetch API підтримує різні режими обробки редиректу: follow
, error
і manual
, але я не можу знайти спосіб , щоб переглянути новий URL або код стану , коли Перенаправлення було скасовано. Ви можете просто зупинити перенаправлення, і тоді це виглядає як помилка (порожня відповідь). Якщо це все, що вам потрібно, ви добре піти. Крім того, слід мати в виду , що запити , зроблені з допомогою цього API не відміняв ще . Вони зараз є .
Що стосується XMLHttpRequest, ви можете HEAD
сервер і перевірити, чи змінилася URL-адреса:
var http = new XMLHttpRequest();
http.open('HEAD', '/the/url');
http.onreadystatechange = function() {
if (this.readyState === this.DONE) {
console.log(this.responseURL);
}
};
http.send();
Ви не отримаєте код статусу, але знайдете нову URL-адресу, не завантажуючи з неї всю сторінку.
OPTIONS
може бути кращим вибором, так чи інакше працює лише для не загальних цілей, і т. Д. Адміністратор налаштував перенаправити весь сайт / схему, наприклад, HTTP -> HTTPS
Ви можете використовувати responseURL
властивість, щоб отримати місце переадресації або перевірити, чи отримана відповідь була в кінцевому підсумку з місця, яке ви приймаєте.
Звичайно, це означає, що результат все-таки отримується, але принаймні ви можете отримати необхідну інформацію про місце перенаправлення та, наприклад, виявити умови, коли ви хочете відкинути відповідь.
Ні, у вас немає жодного місця в API, оголеному XMLHttpRequest, що дозволяє автоматично переосмислити його поведінку за замовчуванням після виконання 301 або 302.
Якщо клієнт працює під керуванням IE у Windows, ви можете використовувати WinHTTP замість цього, щоб встановити параметр для запобігання такої поведінки, але це дуже обмежує рішення.