Исходя из вашего вопроса, я не совсем уверен, имеете ли вы в виду HTTP-аутентификацию или схему аутентификации на основе форм, и поэтому я рассмотрю оба.
Получить URL перенаправления, чтобы я мог отправить второй запрос (xhr.getResponseHeader («Location») НЕ работает),
При общем способе построения XHR (и в частности в Chrome):
XHR не очень гибок и предоставляет относительно высокоуровневый API с тем же поведением, которое браузер выполняет во всех других запросах (адресные строки адреса, исходные URL-адреса изображений, встроенные URL-адреса скриптов), то есть перенаправления обрабатываются прозрачно. Никакие события не будут генерироваться в JavaScript, предупреждающем вас об этом перенаправлении или промежуточных кодах состояния 302/301, вы получите только окончательный код состояния и данные. Поэтому невозможно извлечь заголовок «Местоположение» из ответа, так как окончательный ответ не будет содержать заголовок «Местоположение».
У нового сохраняющего запрос перенаправления настройки из исходного запроса
XHR не предоставляет это в качестве опции, и это будет некорректное поведение по умолчанию. Пример того, почему это должно и не должно происходить по умолчанию:
Acme Corp. предоставляет сервис коротких ссылок для своих сотрудников. Я нажимаю на короткую ссылку, которую я получаю от коллеги, и мне предлагается HTTP-аутентификация службы коротких ссылок Acme. Перенаправление происходит после этой аутентификации. Нет причин, по которым сайт, на который перенаправляется сайт, должен требовать мои учетные данные, и поэтому браузер мог бы некорректно передавать эту информацию (и на самом деле это проблема безопасности). Аналогично, данные POST не следует пересылать, так как они могут быть предназначены только для использования по прямому URL-адресу.
Получите окончательный URL-адрес, с которого произошла ошибка, чтобы я мог отправить еще один запрос.
К сожалению, по соображениям безопасности и определения стандартов стандартный объект XHR (включая тот, который Chrome использует для межсайтовых запросов в расширениях) не предоставляет никакого способа доступа к окончательному URL-адресу, в котором есть ошибка. Вы можете получить доступ только к окончательному статусу HTTP и любым данным, возвращаемым по окончательному URL.
-
Учитывая это, у вас есть несколько вариантов в зависимости от того, насколько вы контролируете ситуацию:
1) Если у вас есть контроль над сервером перенаправления, рассмотрите возможность включения информации. в ваших AJAX-запросах, указывающих на AJAX-клиента, и пусть сервер вместо этого возвращает данные (то есть объект json), указывающие на необходимость перенаправления.
Или, если планируется всегда передавать данные аутентификации, рассмотрите возможность реализации какого-либо механизма для передачи сеанса или включения информации аутентификации. в URL, который перенаправляется на целевой URL, чтобы использовать эту информацию.
2) Если у вас есть контроль над местом назначения перенаправления, рассмотрите возможность включения URL-адреса получателя при создании страницы с ошибкой аутентификации. Объект XHR будет иметь доступ к этим данным ответа и может их проанализировать для продолжения нового запроса.
3) Если у вас нет контроля ни на сайте перенаправления, ни на сайте назначения, рассмотрите возможность размещения прокси-сервера для обработки запросов и, в частности, для получения 302.
http://myserver/?url=http://redirectsite.com&user=...&pass=...
4) Если ни один из вышеперечисленных вариантов не является опцией, наименее желательным, но все же жизнеспособным вариантом является создание расширения NPAPI для Chrome, которое выполняет собственный код. Это даст вам полный контроль над запросами и позволит вам делать практически все что угодно. Однако обратите внимание, что это происходит за счет более сложной разработки, потенциальных проблем безопасности и меньшей желательности пользователя.