2017-07-17 56 views
2

我試圖從一個瀏覽器應用程序,我通過使用節點的HTTP服務器本地託管接口OpenFIGI API。我的請求後看起來像這樣OpenFIGI API和CORS

var xhr = new XMLHttpRequest(); 
    var url = 'https://api.openfigi.com/v1/mapping'; 
    var params = [{"idType": "ID_WERTPAPIER", "idValue": "851399", "exchCode": "US"}]; 
    xhr.open('POST', url, true); 
    xhr.setRequestHeader("Content-type", "text/json"); 
    xhr.onreadystatechange = function() { 
    console.log(xhr.responseText); 
    } 
    xhr.send(params); 

但是,所有我得到的是錯誤

  • 無法加載資源:服務器與405狀態響應(不允許的方法)
  • XMLHttpRequest無法加載https://api.openfigi.com/v1/mapping。對預檢請求的響應不會通過訪問控制檢查:請求的資源上不存在「訪問控制 - 允許來源」標頭。原因'http://127.0.0.1:20000'因此不被允許訪問。響應有HTTP狀態代碼405

因爲我一直在用不同的方式做了要求和不同的設置努力的時候,我想知道 - 是可能?我錯過了什麼w.r.t.請求?我查看了OpenFIGI API示例,但我找不到其他任何(CORS)設置。

回答

1

OpenFIGI API響應不包括使瀏覽器允許您的前端JavaScript代碼來訪問響應所需的Access-Control-*響應頭。所以如果你想發送來自你的前端代碼的請求,你唯一的選擇就是使用代理。

以儘量通過公開CORS代理請求,請嘗試更改您的代碼:

var url = 'https://cors-anywhere.herokuapp.com/' 
    + 'https://api.openfigi.com/v1/mapping'; 

這會通過https://cors-anywhere.herokuapp.com的請求,這將請求轉發給https://api.openfigi.com/v1/mapping,然後接收響應。然後,https://cors-anywhere.herokuapp.com後端將Access-Control-Allow-Origin標題添加到響應中,最後將其返回到請求的前端代碼。

瀏覽器將然後讓你的前端代碼訪問的響應,因爲與Access-Control-Allow-Origin響應標頭,響應是瀏覽器看到的。

您還可以輕鬆設置使用https://github.com/Rob--W/cors-anywhere/

有關哪些瀏覽器做細節你自己的CORS代理,當您發送使用XHR或提取API或AJAX方法JavaScript代碼從JavaScript libraries-從前端跨域請求並詳細說明爲了使瀏覽器允許前端代碼訪問響應,必須收到哪些響應頭,請參閱https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

+0

我試圖運行lz129與@ sideshowbarker的修復代碼。 的小提琴是在這裏:https://jsfiddle.net/theo/qvq4xLgy/ 我每次運行的代碼有一個400錯誤。有沒有解決這個問題的方法? – Theo

+0

@sideshowbarker - 看起來像添加了撇號後,我加入你的名字後阻止你收到我以前的消息通知。你會好好看看這個消息嗎? – Theo

+0

@他不知道。您可能想將其作爲單獨的問題發佈。關閉我的頭腦:如果獲得400錯誤可能表明,您發佈的JSON數據不是API端點期望的格式。嘗試使用curl或郵遞員等方式發佈相同的數據,如果你這樣做的話還能得到400的回報,那麼你知道問題出在你的數據上,而不是用你發佈的特定機制。 – sideshowbarker