我在使用 ngResource 调用亚马逊云科技上的 REST API 时收到此错误:
XMLHttpRequest 无法加载
http://server.apiurl.com:8000/s/login?login=facebook。对预检请求的
响应未通过访问控制检查:请求
的资源上不存在
“访问控制允许源”标头。因此,不允许访问源“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);
}
[...]
我正在使用浏览器。我还能做些什么来解决这个问题?
我什至将服务器配置为接受来自源头的标头。localhost
您遇到了 CORS 问题。
有几种方法可以修复或解决此问题。
更详细地说,您正在尝试从本地主机访问 api.serverurl.com。这是跨域请求的确切定义。
通过关闭它只是为了完成你的工作(好吧,但如果你访问其他网站并且只是踢罐子,你的安全性很差),或者你可以使用一个代理,让你的浏览器认为所有请求都来自本地主机,而实际上你有一个本地服务器,然后调用远程服务器。
因此,api.serverurl.com 可能会成为localhost:8000 / api,并且您的本地nginx或其他代理将发送到正确的目的地。
现在,应大众需求,100% 更多的 CORS 信息 — 同样美味!
绕过 CORS 正是为那些只是学习前端的人展示的内容。
带有承诺的 HTTP 示例
我的“API服务器”是一个PHP应用程序,因此为了解决此问题,我找到了以下解决方案:
将这些行放在文件索引中.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');
在 ASP.NET Core 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")]
模板简介:该模板名称为【 JavaScript 对预检请求的响应未通过访问控制检查】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【JavaScript】栏目查找您需要的精美模板。