2016-02-28 39 views
0

我很困難的時間已經發出一個簡單的GET請求到第三方REST Api。我已經閱讀了一些教程和SO問題,但我無法完成它的工作。我收到兩個錯誤之一預檢Javascript CORS GET請求被阻止或無效

響應無效(重定向)

,或者(通過HTTPS)

迴應預檢要求未通過訪問控制檢查:無「 Access-Control-Allow-Origin'標題出現在請求的資源上。因此不允許訪問原產地'https://localhost:8433'。

關於第二條消息:這是否只是服務器不支持CORS的問題?

我的代碼:

var xmlHttp = new XMLHttpRequest(); 
 
var url = 'https://inspirehep.net/record/451647?of=recjson&ot=recid,number_of_citations,authors,title'; //http or https, tried both 
 

 
/* 
 
    doing sth with response here like populate dropdown etc. 
 
*/ 
 

 
xmlHttp.open('GET', url, true); 
 
xmlHttp.setRequestHeader("Access-Control-Allow-Headers", "Content-Type, X-Requested-With, Cache-Control"); 
 
xmlHttp.setRequestHeader("Content-Type", "application/json"); 
 
xmlHttp.setRequestHeader("Access-Control-Allow-Origin", '*'); 
 
xmlHttp.setRequestHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS"); 
 
xmlHttp.setRequestHeader("Access-Control-Allow-Credentials", "true"); 
 
xmlHttp.send();

所有的應用程式的node.js服務器(本地主機)和上面的腳本上運行的被包括以.html視圖單獨的文件中。

我可以正確地從這個API的web瀏覽器,提琴手,郵遞員等獲得json響應。我也嘗試過不同的API(例如Openweather API),認爲這是服務器配置的問題,但結果是一樣的。

我會感謝任何幫助 - 也許我只是誤解了關於CORS的一些東西。

+1

CORS標頭不是您可以在您的請求中發送的東西。服務器必須使用標題進行響應。 – migg

+1

「這只是服務器不支持CORS的問題嗎?」 - 是的。 – Quentin

+0

感謝您的回答,我認爲可能是這樣。 – learningHappily

回答

1

如果目標網址在您的服務器或您管理的服務器上運行,並且該服務器運行nodejs,您可以使用cors https://www.npmjs.com/package/cors,但無法從瀏覽器設置標題,但是,如果這是第三方url,不允許CORS,那麼你應該通過從你的服務器到第三方服務器配置一個代理來解決你的問題,從你的後端發出請求。

0

有關nodejs的CORS答案很可能是正確的,但我想建議您運行測試以確保代碼正常工作。

嘗試使用Chrome並下載擴展程序以允許CORS。這樣,您將在嘗試正確的解決方案之前首先測試功能。