我知道已经有100个问题了,但是因为他们没有解决我的问题而将其发布
因此,我有一个已启动并正在运行的多链网络设置。我们有API可以访问网络。问题是我可以从POSTMAN调用POST请求,但是当我从Angular UI调用POST请求时,它根本无法工作。
只需添加一下,我就很了解浏览器和POSTMAN如何处理POST请求,但是很遗憾,我无法使它正常工作。
我很清楚,当我们调用“ POST”方法时,浏览器发送了“ OPTIONS”请求,但我一直收到405。我已经检查了代码,但找不到答案。以下是我的Angular代码:-
var surl = "URL";
let headers = new HttpHeaders({
"Content-Type": "application/json"
});
headers.append("apikey","<mykey>");
let options = {
headers: headers
}
this.httpClient.post(surl,'{"method": "listpermissions", "params": []}',options).subscribe(value => {
console.log(value);
});
我也尝试过如下所示的标题,但是它不起作用:-
const httpOptions = {
headers: new HttpHeaders({
'Content-Type':'application/json',
'apikey': '<apikey>'
})
};
也这样:-
let oheaders: HttpHeaders = new HttpHeaders();
oheaders = oheaders.set('Content-Type','text/plain');
oheaders = oheaders.set('apikey','<apikey>');
有帮助吗??
以防万一有人想看看请求和响应头。
预先感谢, Vishesh。
答案 0 :(得分:4)
修改
我错过了提到多链的部分。由于无法绕开CORS,因此在多链前面添加代理服务器可能是唯一的解决方案(直到他们添加CORS支持)https://www.multichain.com/qa/9805/how-to-enable-cors-in-multichain
原始答案
您应该阅读有关CORS的内容,但是基本上,您的浏览器正在向您的API发送OPTIONS
预检请求,因为您的后端与角度前端应用程序位于不同的域/端口上。因此,浏览器实际上正在使用该OPTIONS
请求与后端进行检查,是否允许它向API发出POST
请求。
它可以在POSTMAN中使用,因为只有浏览器实现了CORS,而没有其他客户端(例如POSTMAN)实现。
问题是您的后端服务器不允许OPTIONS
请求,并返回405状态代码以表明不允许此方法。您需要启用该方法以实现CORS。
您可以直接在您的后端应用程序代码中(使用nodejs,php,.net ...)或在Web服务器级别(nginx / apache / IIS)中启用CORS
当遇到OPTIONS
请求时,您的后端应返回200 http状态代码(而不是405)以及以下标头
Access-Control-Allow-Origin: http://yoursite.com (or use * for debugging)
Access-Control-Allow-Methods: GET, POST, OPTIONS (and PUT/DELETE if needed)
Access-Control-Allow-HEADERS: apikey, content-type
我暂时可能还没有想到更多的标题,但是如果缺少某些内容,您会收到一条不同的错误消息
答案 1 :(得分:-1)
您应该使用此chrome扩展程序启用Cors起源。这里的a link或后端开发人员应在其服务方法代码中添加标头。
答案 2 :(得分:-1)
CORS问题
405 “(不允许使用方法)” 响应,指出Foursquare API端点未配置为处理OPTIONS请求。因此,预检失败,您的浏览器再也不会继续执行POST请求它尝试发送的代码了。