2014-02-01 5 views
0

Я не уверен, что это просто случай неправильной настройки в моем вызове ajax или мое непонимание того, как работает CORS.CORS и jQuery ajax call

У меня есть веб-сервер, работающий на моем ящике в сети - larryq.mycompany.com. У меня есть полный доступ к этой машине и был установить следующие заголовки на своих страницах:

Access-Control-Allow-Origin = * 
Access-Control-Allow-Headers = 'Authorization' 
Access-Control-Allow-Credentials = true 
Access-Control-Allow-Methods = "GET, POST, PUT, DELETE" 

Когда я загружаю мою текущую страницу тестирования я вижу эти значения в моих заголовках ответа.

На этой странице я делаю AJAX вызов на другой сервер в сети, используя OAuth:

var OAuthAuthorizationString = 'OAuth realm="http://www.mycompany.com/", oauth_consumer_key="consumerkey"....oauth_nonce="1446691", oauth_version="1.0"' 

$.ajax 
({ 
    type: 'GET', 
    url: 'https://secure.mycompany.com?val1=33&val2=45', 
    data: [], 
    beforeSend: function (xhr) { 
     xhr.setRequestHeader('Authorization', 'OAuthAuthorizationString'); 
    } 
}) 
.done(function (html) { 
    $("#results").empty(); 
    $("#results").append(html); 
}) 
.fail(function (jqXHR, textStatus) { 
    $("#results").empty(); 
    $("#results").append(textStatus); 
}); 

Прямо сейчас, когда я запускаю это я получаю 403 Forbidden ответ во время того, что, как представляется, CORS предполетная проверка.

Если я открываю клиент расширенного клиента Google и обрабатываю тот же запрос GET, используя эту строку OAuth в заголовке авторизации, запрос работает, и я возвращаю свои данные.

Должно быть, я что-то делаю неправильно, но не могу понять, что? Я сталкиваюсь с каким-то ограничением ajax, о котором я не знаю или (вполне вероятно) неправильно настроил ситуацию?

Я использую jQuery 1.10 fwiw.

+1

Игнорирование клиента Google на мгновение, вы установили заголовки управления доступом на один сервер, но вы делаете запросы на другой сервер? Чего вы ожидаете? –

+0

403 Запрещено = проблема на стороне сервера. Сделали ли вы файл w, r, r? (chmod 755) – Faron

+0

@MikeW Я слышал, что вы говорите. Я думал то же самое, пока не заработал клиент Google, а затем сказал: «Знаю ли я CORS и его ограничения? Не совсем? Тогда давайте попробуем это ...», после чего прошло 3 часа головокружения и, возможно, это будет – larryq

ответ

0

Я пытаюсь понять, как использовать Корс себя, так что это не может решить проблему, но, по словам the documentation:

Важное примечание: при ответе на дипломированный запроса, сервер должен указать домен, и не может использовать дикий кардинг.

Таким образом, вы не можете иметь:

Access-Control-Allow-Origin = * 
Access-Control-Allow-Credentials = true 

Вместо этого вы должны явно указать допустимое происхождение. Например:

Access-Control-Allow-Origin = larryq.mycompany.com 
Access-Control-Allow-Credentials = true