2016-12-20 82 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頭文件需要放在服務器的* response *後面,而不是您的請求。如果CORS頭文件不在響應中,那麼你應該在服務器端添加它們。如果你不能控制服務器能夠添加這些頭文件,那麼你不能從JS發出請求。您需要改爲使用服務器端。 –

+0

您正在發送的這些標題實際上可能會導致CORS問題。 –

回答

0

由於rory-mccrossan在評論中提到,CORS保護旨在使網站無法直接訪問另一個網站的內容(在瀏覽器中),除非被訪問的網站同意。

它會完全毀掉CORS的點,如果一個網站只是必須以規避防禦

而是發一些標題,你將需要使用CORS代理。這是一個服務器,當給予像yourCORSproxy.example.com/http://testwebsite/test這樣的請求時,將加載頁面並返回它,但允許使用CORS(如正常代理但啓用CORS)。

其中一個CORS代理是https://crossorigin.me,但在撰寫本文時,它已停止運行。如果您只是創建自己的代理,它可能會更穩定。


tl; dr:testsite.test應在其響應中發送標題。您不應該根據您的請求發送標題。