2013-10-07 2 views
2

Я пытаюсь сделать запрос на перекрестный домен. Чтобы это сделать, я должен установить http-заголовок.XMLHttpRequest не установлен с использованием .setRequestHeader

$.ajax({ 
       type: 'GET', 
       url: 'api', 
       beforeSend: function (request) 
       { 
        request.setRequestHeader('authorization', 'Basic ...=='); 
       }, 
       success: function(data) { 
        debugger; 
       } 
      }); 

beforeSend метод, кажется, вызывается, но «авторизации» заголовка не установлена. Не могли бы вы помочь мне разобраться в этом?

ОБНОВЛЕНО: вот полученные CORS заголовки:

Access-Control-Allow-Origin : localhost 
Access-Control-Allow-Credential: true 
Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS 

Похоже Access-Control-Allow-Headers отсутствует.

+0

Вы уверены, что ваш API поддерживает CORS? Симптомы, которые вы здесь описываете, настоятельно указывают на то, что это не так. Или, по крайней мере, он не поддерживает настройку заголовка авторизации. Убедитесь, что ваш API отправляет соответствующие заголовки CORS. Также посмотрите консоль Google Chrome, чтобы увидеть возможные ошибки. Вот откуда будут издаваться подобные предупреждения. –

ответ

2

Убедитесь, что ваш API поддерживает CORS и что Authorization является допустимым заголовком запроса. При отправке запроса OPTIONS к конечной точке ваш API должен ответить на следующие заголовки ответа:

Access-Control-Allow-Headers:X-Requested-With, Content-Type, Authorization 
Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS 
Access-Control-Allow-Origin:* 

Это позволяет клиенту установить X-Requested-With, Content-Type и Authorization заголовки запроса при вызове метода API и позволяет GET, POST, PUT, DELETE, OPTIONS глаголы из любого происхождения домена.

Итак, чтобы отладить проблему, отправьте запрос OPTIONS на конечную точку API и обратите внимание на HTTP-заголовки ответов.

+1

Спасибо Дарин за ваш ответ! Похоже, сервер не устанавливает заголовок Access-Control-Allow-Headers. –

+0

В этом проблема. В этом случае вы не можете выполнить запрос AJAX кросс-домена. –

Смежные вопросы