Запретить перенаправление Xmlhttprequest - PullRequest
100 голосов
/ 23 октября 2008

Можно ли запретить браузеру следовать перенаправлениям при отправке XMLHttpRequest-s (т.е. вернуть код состояния перенаправления и обработать его самостоятельно)?

Ответы [ 4 ]

94 голосов
/ 05 декабря 2008

Не соответствует стандарту W3C для объекта XMLHttpRequest (выделение добавлено):

Если ответ является перенаправлением HTTP:

Если источник URL, передаваемый заголовком Location, является тем же источником с происхождением XMLHttpRequest и редирект не нарушает бесконечность меры предосторожности, прозрачно следуйте за редиректом во время наблюдения правила события запроса того же источника.

Они рассматривали для будущего выпуска:

Эта спецификация не включает следующие функции, которые в настоящее время рассматривается для будущей версии эта спецификация:

  • Свойство для отключения следующих перенаправлений;

но в спецификации последней это больше не упоминается.

30 голосов
/ 07 ноября 2015

Новый 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, не загрузив с него всю страницу.

12 голосов
/ 09 февраля 2015

Вы можете использовать свойство responseURL, чтобы получить адрес перенаправления или проверить, был ли ответ в конечном итоге получен из местоположения, которое вы принимаете.
Это, конечно, означает, что в любом случае результат извлекается, но, по крайней мере, вы можете получить необходимую информацию о месте назначения перенаправления и, например, определить условия, когда вы хотите отменить ответ.

11 голосов
/ 23 октября 2008

Нет, вы не найдете никакого места в API, предоставляемом XMLHttpRequest, которое позволяло бы вам переопределить поведение по умолчанию для автоматического следования 301 или 302.

Если на клиенте запущен IE в Windows, вы можете использовать WinHTTP вместо этого, чтобы установить параметр, предотвращающий такое поведение, но это очень ограничивающее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...