jquery ajax и упреждающая базовая аутентификация

Я пытаюсь получить доступ к некоторым службам RESTful, которые работают под приоритетной базовой аутентификацией Apache. Я использую jquery Ajax и отправляю пользователя и пароль с заголовком «Аутентификация». Однако мой запрос выдает пустую ошибку при каждом запуске.

Вот полный вызов $.ajax:

$.ajax({
      cache:false,
      url: urladdress,
      type:'GET',
      async:false,
      headers: { "cache-control": "no-cache" },
      dataType: "html", //or xml or json
      contentType: "html",
       beforeSend : function(req) 
       {
          req.setRequestHeader('Authorization', "Basic " +  base64string); //user:password);
       },
      success: function(data){
         successcallback(data);
      },
      error: function(xhRequest, ErrorText, thrownError){
           alert("ERROR: "+ JSON.stringify(xhRequest));
      },
      complete: function(result){
        ...
      }
});

Что я делаю неправильно? Есть ли что-то, что я здесь игнорирую? Спасибо.


person Gabriel Mendez    schedule 23.04.2013    source источник
comment
Обновление: я изменил параметры $ajax. Теперь я передаю свои учетные данные с аргументами имя пользователя: и пароль:. Ошибка гласит: Доступ к ограниченному URI запрещен Звучит как междоменная проблема, не так ли?   -  person Gabriel Mendez    schedule 23.04.2013
comment
Да, это междоменная проблема, если вам отказано в доступе к ограниченному URI. Вам нужно использовать JSONP для этого   -  person Kenny Ki    schedule 24.04.2013
comment
К сожалению, я думаю, что буду использовать PHP-прокси для вызова сервисов. Кажется, нет никакого способа пересечь это с помощью простого JavaScript.   -  person Gabriel Mendez    schedule 24.04.2013
comment
Если вы не владеете сервисом (не можете применить ?callback=), то лучше всего использовать прокси ;-)   -  person Kenny Ki    schedule 25.04.2013
comment
учетные данные не передаются в качестве заголовка в ajax. не уверен, как jquery подключен, чтобы справиться с тем, как это сделать, но обратитесь к w3.org/TR/XMLHttpRequest/#the-open()-method для получения информации об использовании простого JS xmlHttpRequest - редко используемые четвертый и пятый аргументы для open()...   -  person dandavis    schedule 01.05.2013
comment
@dandavis: Вы правы. Я понял слишком поздно, но это правда.   -  person Gabriel Mendez    schedule 06.05.2013


Ответы (1)


Решение находится на стороне сервера, вы должны включить некоторые пользовательские заголовки в ответ на междоменные работы. Эксперимент отправляет в ответ следующие заголовки:

Access-Control-Allow-Origin: yourApiDomain

Access-Control-Allow-Methods: *

  • В случае использования пользовательских заголовков:

    Access-Control-Expose-Headers: X-My-Custom-Header, X-Another-Custom-Header

    Access-Control-Allow-Headers: X-My-Custom-Header, X-Another-Custom-Header

  • В случае использования файлов cookie HTTP и информации об аутентификации HTTP:

    Access-Control-Allow-Credentials: правда

Для получения дополнительной информации прочитайте документацию в MDN о CORS:

person rodmucha    schedule 02.05.2013