对预检请求的响应不会通过访问控制检查
我收到此错误使用ngResource调用亚马逊网络服务上的REST API:
XMLHttpRequest无法加载http://server.apiurl.com:8000/s/login?login=facebook。 对预检请求的响应不会通过访问控制检查:请求的资源上不存在“访问控制 - 允许来源”标头。 因此不允许Origin'http:// localhost'访问。 错误405
服务:
socialMarkt.factory('loginService', ['$resource', function($resource){
var apiAddress = "http://server.apiurl.com:8000/s/login/";
return $resource(apiAddress, { login:"facebook", access_token: "@access_token" ,facebook_id: "@facebook_id" }, {
getUser: {method:'POST'}
});
}]);
控制器:
[...]
loginService.getUser(JSON.stringify(fbObj)),
function(data){
console.log(data);
},
function(result) {
console.error('Error', result.status);
}
[...]
我使用chrome,我不知道还有什么可以解决这个问题。 我甚至将服务器配置为接受来自origin localhost
头文件
您遇到了CORS问题。
有几种方法可以解决这个问题。
更详细地说,您正尝试从本地主机访问api.serverurl.com。 这是跨域请求的确切定义。
通过关闭它只是为了完成您的工作(好吧,如果您访问其他网站并将可用的路由器踢出去,那么可能会导致安全性降低),您可以使用代理,让浏览器认为所有请求都来自本地主机真的,你有本地服务器,然后调用远程服务器。
所以api.serverurl.com可能会成为localhost:8000 / api,并且您的本地nginx或其他代理将发送到正确的目标。
我的“API服务器”是一个PHP应用程序,所以要解决这个问题,我找到了下面的解决方案:
将行放在index.php中
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');
在AspNetCore web api中,通过添加“Microsoft.AspNetCore.Cors”(版本1.1.1)并在Startup.cs中添加以下更改,可以解决此问题。
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("AllowAllHeaders",
builder =>
{
builder.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod();
});
});
.
.
.
}
和
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
// Shows UseCors with named policy.
app.UseCors("AllowAllHeaders");
.
.
.
}
并在控制器上放置[EnableCors("AllowAllHeaders")]
。
上一篇: Response to preflight request doesn't pass access control check