Кросс-начальный заголовок "Авторизация" с 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() будет заменен более сложным методом, хэшированием тела, датой и т.д.
Ответы
Ответ 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/