我做了一個小型應用程序,它可以通過rs232從稱重秤上獲取數據,並通過內置web服務器返回數據,如http://localhost:51111/Scale1?min=1.5&max=420
。參數是設置一些配置數據的規模。無法獲得XmlHttpRequest與CORS一起工作
現在我需要從中央機器上的IIS服務器獲取網頁中的數據。有一個問題CORS這裏,但我的Firefox似乎支持CORS:
var supportsCORS = (new XMLHttpRequest()).withCredentials !== undefined;
返回true。
使用在幾個論壇和JS書籍中找到的信息,我做了這個JS代碼:
function httpGetAsync() {
var theUrl = 'http://localhost:51111/Scale1?min=1.5&max=420';
var req = new XMLHttpRequest();
req.onreadystatechange = function() {
if (req.readyState == XMLHttpRequest.DONE) {
$('#value').text('state: ' + req.readyState + ', status: ' + req.status + ', text: ' + req.responseText);
}
}
req.open("GET", theUrl, true); // true for asynchronous
req.send(null);
return;
}
網頁上有額外的HTTP標頭允許跨源請求腳本(CORS):
Access-Control-Allow-Origin: http://localhost:51111
Access-Control-Allow-Methods: GET,POST
使用Fiddler和Firefox調試器(F12)我可以看到JS確實向偵聽端口51111的本地應用程序發送請求,在該應用程序中,我可以看到正確接收到最小/最大數據,並且應用程序狀態200的回覆以及正文中的一些數據,這是原始回覆E:
HTTP/1.1 200 OK
Content-Length: 4
Server: Microsoft-HTTPAPI/2.0
Date: Tue, 15 Aug 2017 14:36:50 GMT
1.15
尋找涼爽,但:
我的問題是,上面的JS不具有主體內容:req.status爲零0,不是200,和req.responseText爲空字符串而不是「1.15」。
我試過Firefox和Chrome。
'http:// localhost:51111'服務器需要配置爲發送'Access-Control-Allow-Origin'響應頭和任何其他必需的'Access-Control-Allow- *'響應頭。從你的問題,你不清楚你在哪裏或如何設置這些,但在問題中引用的響應並沒有顯示它們被接收爲響應標題,所以看起來你不應該有'http:// localhost:51111'服務器配置爲發送它們 – sideshowbarker
@sideshowbarker你是對的!額外的頭文件需要在第二臺服務器的響應中。我正在閱讀https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS以瞭解這一點。如果你想發表你的評論作爲解決方案,我會很樂意接受。 – Roland
@sideshowbarker當您被列爲該mozilla頁面的貢獻者時,您可能是正確的人告訴了一些關於CORS的信息,以瞭解爲什麼額外的頭文件需要在第二臺服務器的響應中,而不是在第一臺服務器的響應中服務器。 – Roland