我正在尝试通过使用节点的http-server在本地托管的浏览器应用程序中连接OpenFIGI API。我的POST请求看起来像这样
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。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://127.0.0.1:20000”访问。响应的HTTP状态代码为405。
由于我一直在尝试不同的方式来执行请求和不同的设置,我想知道 - 甚至可能吗?我错过了什么吗?请求?我查看了OpenFIGI API示例,但我在那里找不到任何其他(CORS)设置。
答案 0 :(得分: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或JavaScript库中的Fetch API或AJAX方法从前端JavaScript代码发送跨源请求时浏览器执行的操作的详细信息,以及有关浏览器允许前端代码必须接收哪些响应标头的详细信息访问回复 - 请参阅https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS。