2010-08-25 1 views
15

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

У меня возникают две проблемы. Во-первых, что если я не указываю «JSONP» для DATATYPE, jQuery.ajax() запрос возвращает ошибку:

Access to restricted URI denied code: 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 не будет вызван.

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

ответ

12

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

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

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

+5

Это правильный ответ, JSONP не может содержать заголовки USER/PWD, которые требуются Basic Auth. Значит, вы прокляты, если вы это сделаете, и прокляли, если вы этого не сделаете :) –

0

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

7

Попробуйте сделать http://user:[email protected]. Это имитирует запрос basic-auth.

+2

похоже, что это работает, но только для некоторых браузеров. – jhanifen

+1

Использование этого синтаксиса будет заблокировано в Chrom из сборки M59: https://www.chromestatus.com/feature/5669008342777856 – Beejamin