Основная проверка подлинности с помощью запроса jQuery.ajax и jsonp
У меня есть локальные файлы html/js, с которыми я хотел бы вызывать некоторые удаленные серверы через https и в конечном итоге использовать Basic Authentication для запроса.
У меня возникают две проблемы. Во-первых, если я не укажу "jsonp" для dataType, запрос jQuery.ajax() возвращает ошибку:
Доступ к ограниченному URI-адресу: 1012
Мои запросы рассматриваются как междоменные, потому что мой основной файл работы хранится локально, но извлекает данные с сервера в другом месте?
Так хорошо, я обновляю вызов, чтобы он теперь выглядел следующим образом:
$.ajax({
url: myServerUrl,
type: "GET",
dataType: "jsonp", // considered a cross domain Ajax request if not specified
username: myUsername,
password: myPassword,
success: function(result)
{
// success handling
},
error: function(req, status, errThrown){
// error handling
}
})
Поскольку мне нужно использовать Basic Authentication, я передаю имя пользователя/пароль, но если я отслеживаю запрос, я не вижу, чтобы он был установлен, и, кроме того, сервер отправляет ответ об ошибке, поскольку он не имеет ожидаемая информация.
Кроме того, поскольку у меня установлен jsonp
, beforeSend
не будет вызван.
Как мне передать учетные данные с помощью базовой проверки подлинности для этого запроса?
Ответы
Ответ 1
Короткий вариант - вы не можете этого сделать. Ваши подозрения верны, потому что вы локальны, и эти файлы удалены, вы не можете получить к ним доступ, вы заблокированы политикой того же происхождения. Обход для этого JSONP, но это действительно не похоже на вашу ситуацию...
JSONP работает по-разному: для получения файла используется запрос GET с тегом <script>
, поэтому вы не отправляете специальные заголовки или что-то еще.
Вам необходимо проксировать запрос через сервер, на котором вы находитесь (домен, где выполняется этот script) или другой параметр прокси, но переход от клиента к другому домену заблокирован, главным образом по соображениям безопасности.
Ответ 2
Попробуйте сделать http://user:[email protected]. Это имитирует запрос basic-auth.
Ответ 3
Я думаю, вам придется добавить прокси-сервер какого-то рода. JSONP - это особый способ использования тега script. Таким образом, он не позволяет устанавливать произвольные заголовки. И, конечно же, вы не можете использовать XHR с перекрестным происхождением.