2016-12-20 5 views
-1

У меня возникли проблемы с запросом AJAX. Я получаю ошибку ниже:

Error: Access is denied

Я попробовал этот запрос JQuery AJAX:

$.support.cors = true; 
$.ajax({ 
    url: 'http://testwebsite.com/test', 
    type: "GET", 
    dataType: 'json', 
    contentType: 'application/json', 
    crossDomain: true, 
    headers: { 
     'Access-Control-Allow-Methods': 'GET, POST, OPTIONS', 
     'Access-Control-Allow-Origin': 'http://testwebsite/test', 
     'Access-Control-Allow-Headers': '*', 
     'Access-Control-Allow-Credentials': 'true' 
    }, 
    xhrFields: { 
     withCredentials: true 
    }, 
    success: function(data) { 
     alert("Data from Server" + JSON.stringify(data)); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     alert("You can not send Cross Domain AJAX requests: " + errorThrown); 
    } 
}); 

Может кто-нибудь любезно дайте мне знать, что я пропускаю. Заранее спасибо.

+1

Заголовки CORS должны быть помещены на * ответ * назад с сервера, а не на ваш запрос. Если заголовки CORS не находятся в ответе, вы должны добавить их на сервер. Если вы не можете контролировать сервер, чтобы иметь возможность добавлять эти заголовки, вы не можете сделать запрос от JS. Вместо этого вам понадобится серверная. –

+0

Те заголовки, которые вы отправляете, могут фактически вызвать проблему CORS. –

ответ

0

Как упоминается в комментарии rory-mccrossan, защита CORS разработана таким образом,

Было бы полностью разрушить точку CORS, если сайт просто должен отправить некоторые заголовки, чтобы обойти защиту

Вместо этого вам нужно будет использовать прокси CORS. Это сервер, который при запросе, например, yourCORSproxy.example.com/http://testwebsite/test, загрузит страницу и вернет ее, но с разрешенным CORS (как обычный прокси, но с включенным CORS).

Один из этих прокси-серверов CORS: https://crossorigin.me, но на момент написания этого он не работает. Это может быть более стабильным, если вы просто создаете свой собственный прокси.


Tl; др: testsite.test должны посылать заголовки в своем ответе. Вы не должны отправлять заголовки по своему запросу.