2015-02-25 5 views
0

По какой-то причине этот код не отправляет заголовок авторизации. Почему это? Есть ли альтернативы?jQuery не отправляет заголовок авторизации

$.ajax({ 
     type: "POST", 
     data: JSON.stringify(q), 
     url: "https://elasticsearchinstance" + "/index/_search", 
     contentType: 'application/json', 
     crossDomain: true, 
     dataType: 'json', 
     processData: false, 
     headers: { 
     "Authorization": "Basic " + btoa("username:password") 
     }, 
     success: searchCallback 
    }); 

401 Unauthorized 

Если я вручную редактировать запрос в Fiddler, чтобы добавить заголовок авторизации, я получаю HTTP 200.

Edit - в том числе это также не помогает:

beforeSend: function (xhr) { 
    xhr.setRequestHeader ("Authorization", "Basic " +btoa("username:password")); 
}, 

Edit - имя пользователя и пароль также не имеют никакого эффекта:

username: "username", 
password: "password" 
+0

Я думаю, что мои проблемы связаны с этим поведением браузера: http://stackoverflow.com/questions/21783079/ajax-in-chrome-sending-options-instead-of-get-post-put-delete –

ответ

1

Ah - получается, что мой экземпляр ElasticSearch отключил CORS. Насколько я понимаю, Chrome настаивает на отправке запроса OPTIONS, чтобы проверить, разрешен ли межсетевой POST до отправки самого POST, чтобы защитить безопасность пользователя браузера.

Путем ручной модификации запроса и добавления заголовка авторизации в Fiddler я смог пропустить это. (Из-за того, что браузер настаивал на OPTIONS, ни один веб-сайт не мог бы иметь возможность делать это через javascript, поэтому я не мог получить заголовок, добавленный).

0

Почему вы не используете username and password instea d заголовков?

+0

Я просто Пробовал это также, но это также не имеет никакого эффекта. Я пробовал как с jQuery 1.11.2, так и с 2.1.3. Очень смущает ... –

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