Базовая аутентификация с запросом jQuery.ajax и jsonp - PullRequest
15 голосов
/ 26 августа 2010

У меня есть несколько локальных html / js-файлов, с которыми я хотел бы вызывать некоторые удаленные серверы через https и в конечном итоге использовать для запроса обычную аутентификацию.

Я столкнулся с двумя проблемами. Во-первых, если я не укажу «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
     }
})

Поскольку мне нужно использовать обычную аутентификацию, я передаю имя пользователя / пароль, но если я отслеживаю запрос, я не вижу его установленным и, кроме того, сервер отправляет ответ об ошибке, так как он не имеет ожидаемая информация.

Кроме того, поскольку у меня установлен jsonp, beforeSend не будет вызван.

Как передать учетные данные, используя обычную аутентификацию для этого запроса?

Ответы [ 3 ]

12 голосов
/ 26 августа 2010

Короткая версия: вы не можете этого сделать.Ваши подозрения верны, потому что вы локальны, и эти файлы являются удаленными, вы не можете получить к ним доступ, вы заблокированы политикой того же происхождения .Обходной путь для этого - JSONP , но на самом деле это не относится к вашей ситуации ...

JSONP работает по-другому, это запрос GET через тег <script>включите, чтобы получить файл, чтобы вы не отправляли специальные заголовки или что-либо еще.

Вам нужно будет прокси-запрос через сервер, на котором вы работаете (домен, где выполняется этот скрипт) или другойопция прокси, но переход от клиента к другому домену заблокирован, в основном по соображениям безопасности.

7 голосов
/ 17 марта 2011

Попробуйте сделать http://user:password@restservice. Это имитирует запрос базовой аутентификации.

0 голосов
/ 26 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...