2016-08-01 70 views
2

我對在javascript寫幾句跟蹤。這個跟蹤器只是獲取當前訪問的網站所有需要的信息。它也跟蹤阿賈克斯事件。對方是一個java程序,它與web服務器位於同一臺機器上,但正在偵聽不同的端口。由於相同的原始策略(不同端口),我的JavaScript程序應該無法發送數據。在Chrome中的控制檯告訴我:同源策略違規而得到的數據發送

XMLHttpRequest cannot load http://127.0.0.1:8082/posts. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:8081' is therefore not allowed access. 

我不明白的是,數據被髮送到服務器!我仔細檢查了不同的機器上(不同的IP)。我只是想明白爲什麼。我沒有自己寫發送方法,這就是爲什麼我沒有真正理解它。

//sending data to server-tracker 
function sendData(data) 
{ 
    console.log("Sending data: "); 
    console.log(data); 
    var xhr = window.XMLHttpRequest 
     ? new window.XMLHttpRequest() 
     : window.ActiveXObject 
     ? new ActiveXObject('Microsoft.XMLHTTP') 
     : null; 
    xhr.open('POST', "http://127.0.0.1:8082/posts", true); 
    xhr.send(data); 
} 

感謝您的幫助。

+0

同源策略只會停止響應。如果沒有的請求沒有任何反應,ERGO它交付使用。如果你希望阻止來自其他領域的要求,那麼你必須處理在服務器應用程序自己。 – Archer

+0

我真的不知道,謝謝! – mudvayne

+0

不客氣:) – Archer

回答

1

同源策略主要來自讀取來自其他來源數據停止的JavaScript。

它具有防止發送數據到某些情況下的其他來源的一些功能。這些可以概括爲「當請求不能使用HTML表單構建時」。這些會觸發preflight request請求發送實際請求的權限。

Cross Origin Request Forgery這是一個不同的問題,最好通過使用Synchronizer Token(它存儲在站點上的HTML文檔中(所以它只能由從該站點發起的請求發送)和用戶會話中解決(這是用來比較提交的)。