Основная проверка подлинности с помощью запроса 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) или другой параметр прокси, но переход от клиента к другому домену заблокирован, главным образом по соображениям безопасности.

Ответ 3

Я думаю, вам придется добавить прокси-сервер какого-то рода. JSONP - это особый способ использования тега script. Таким образом, он не позволяет устанавливать произвольные заголовки. И, конечно же, вы не можете использовать XHR с перекрестным происхождением.