Подтвердить что ты не робот

Кросс-начальный заголовок "Авторизация" с jquery.ajax()

Я пытаюсь отправить домен с перекрестным происхождением и добавить пользовательский заголовок "Авторизация". См. Код ниже.

Ошибка:

XMLHttpRequest не может загрузить {url}. Поле заголовка запроса. Разрешения Access-Control-Allow-Headers не разрешены.

function loadJson(from, to) {
    $.ajax({
        //this is a 'cross-origin' domain
        url : "http://localhost:2180/api/index.php",
        dataType : 'json',
        data : { handler : "statistic", from : from, to : to
        },
        beforeSend : setHeader,
        success : function(data) {
            alert("success");
        },
        error : function(jqXHR, textStatus, errorThrown) {
            alert("error");
        }
    });
}

function getToken() {
    var cookie = Cookie.getCookie(cookieName);
    var auth = jQuery.parseJSON(cookie);
    var token = "Token " + auth.id + ":" + auth.key;
}

function setHeader(xhr) {
    xhr.setRequestHeader('Authorization', getToken());
}

Я также пробовал:

headers : { 'Authorization' : getToken() },

в запросе ajax.

Может ли быть, что jquery-ajax-инфраструктура блокирует аутентификацию Cross-origin? Как я могу это исправить?

Update:

Кстати: есть ли более безопасный способ хранения auth.key на стороне клиента, а затем в cookie? getToken() будет заменен более сложным методом, хэшированием тела, датой и т.д.

4b9b3361

Ответ 1

Это пример запроса CORS. Если у вас есть доступ к серверу (который, как я полагаю, вы делаете, так как это запрос на localhost), вам нужно будет добавить заголовки ответов CORS. Самое простое - добавить следующие заголовки ответов:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Authorization

Также необходимо настроить сервер для ответа на запросы HTTP OPTIONS. Вы можете узнать больше о запросах CORS здесь: http://www.html5rocks.com/en/tutorials/cors/