Во-первых, я работаю в Google Chrome, если это помогает. Вот поведение:
Я отправляю запрос xhr через jQuery на удаленный сайт (это расширение chrome, и я установил все настройки межсайтового сайта...):
$.ajax({
type: "POST",
contentType : "text/xml",
url: some_url,
data: some_xml,
username: user,
password: pass,
success: function(data,status,xhr){
alert(data);
},
error: function(xhr, status, error){
alert(xhr.status);
}
});
Установленный URL возвращает 302 (это ожидается), а Chrome следует за перенаправлением (также ожидается).
Новый URL-адрес возвращает приглашение для учетных данных, которые не извлекаются из исходного запроса, поэтому Chrome показывает диалоговое окно входа в систему. Если я поставлю исходные учетные данные, я верну ответ о некорректном запрошенном отправлении (это действительный HTTP-запрос - 200 - удаленный сервер просто не любит один из заголовков).
При просмотре окна разработчика в Chrome отправляются два запроса. Первый - это исходный URL со всеми настройками, заданными в запросе AJAX. Второй - URL перенаправления с методом "GET", ничего из поля "POST" и никаких учетных данных.
Я не понимаю, что я могу сделать. Мне нужно:
-
Получите URL-адрес перенаправления, чтобы я мог отправить второй запрос (
xhr.getResponseHeader("Location")
НЕ работает), -
Попросите новый запрос перенаправления сохранить настройки из исходного запроса или
-
Получите окончательный URL-адрес, из-за которого произошла ошибка, поэтому я могу отправить другой запрос.
В идеале я не хочу, чтобы пользователь во второй раз вставлял свои учетные данные в это диалоговое окно, но я возьму то, что могу получить, если могу получить окончательный URL.