Ответы:
Не соответствует стандарту 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 вместо этого, чтобы установить параметр, предотвращающий такое поведение, но это очень ограничивающее решение.