Вопрос

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

Это было полезно?

Решение

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

Если ответ представляет собой перенаправление HTTP:

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

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

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

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

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

Другие советы

Новый API Fetch поддерживает различные режимы обработки перенаправления : 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-адрес, не загрузив с него всю страницу.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top