当我尝试使用POST请求访问本地服务器时,收到以下错误:
XMLHttpRequest无法加载http://127.0.0.1:8000/api/v1/users/login。请求的资源上不存在"Access-Control-Allow-Origin"标头。因此不允许访问源"http://localhost:8100"。
我的服务器允许CORS,因为我已经通过用 Postman 发送请求来测试它,它工作正常。
下面是我的前端代码:
private headers = new Headers({
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS, PUT, PATCH, DELETE',
'Access-Control-Allow-Headers': 'X-Requested-With,content-type',
'Access-Control-Allow-Credentials': true
});
postLogin(data) {
console.log(data);
return new Promise((resolve) => {
this.http.post(this.api + "users/login", data, {headers: this.headers})
.map(res => res.json())
.subscribe(answer => {
this.loggedIn = true;
this.token = answer.token;
resolve(answer);
});
});
}
PS:我没有在GET请求中得到这个错误。
我试着放一个代理,它没有改变任何东西:(
这是我的ionic.config.json
:
{
"name": "hardShop",
"app_id": "",
"v2": true,
"typescript": true,
"proxies": [
{
"path": "/api",
"proxyUrl": "http://127.0.0.1:8000"
}
]
}
3条答案
按热度按时间zfycwa2u1#
请在浏览器中使用this plugin重试。
它允许 AJAX 从任何来源请求任何地址,绕过http/https安全要求或浏览器设置的其他限制(称为CORS),实际上,它在收到的响应中注入
'Access-Control-Allow-Origin': '*'
头,然后 * 才 * 将其传递给运行在浏览器中的应用。请记住,这是一个权宜之计,主要用于开发。您的 * 服务器 * 响应必须实际包含
'Access-Control-Allow-Origin': '*'
报头,最好使用比*
更具体的值。你现在所做的实际上没有任何效果,因为 * 你作为客户端 * 向服务器 * 发送了一个带有该报头的请求 *,服务器立即忽略了它。重要的是服务器 * 在对客户端 * 的响应中有这个报头。
据我所知, Postman 不使用CORS,所以也许这就是它不受影响的原因。
ha5z0ras2#
当您将Http与https(即安全层)连接时,会显示此错误。当我调用位于带有Http的安全服务器中的rest服务到在localhost中运行的应用程序时,也会出现相同的错误。
要允许这样做,您需要在浏览器中安装一个插件,以传递此锁。
如果您使用的是chrome,安装CORS插件的chrome和它会工作。
bvjxkvbb3#
这个问题的一个原因可能是(个人经验):可能您为
database
部署了错误的connectionstring
。我使用了以下两个数据库连接,一个用于本地存储,另一个用于服务器存储
有些人可能使用两个
connectionStrings
,就像我和deploy
localhost database-connection
而不是真实的的server database-connection
,然后试图通过postman
或client-application
访问database
,然后面临这样的问题。请确保您有正确的
deployed
。