我正在尝试使用我的magento的Rest api获取HTTP GET请求。
下面是达到相同的angular2代码!。
public ngOnInit() {
let headers = new Headers({ 'Accept': 'application/json' });
headers.append('Authorization', 'Bearer x9a278mu7xoh4k0jkj08doc5j4b3ac22');
headers.append('Access-Control-Allow-Headers', 'Content-Type');
headers.append('Access-Control-Allow-Methods', 'GET');
headers.append('Access-Control-Allow-Origin', '*');
let options = new RequestOptions({ headers: headers });
return this.http.get('http://10.2.../Mage_ang2/index.php/rest/V1/customers/1',options)
.map(response => console.log(response.json))
.subscribe((items: Person[]) => {
console.log('items: ' + items);
this.people = items;
}, error => console.log(error));
}
我得到(我假设)一个CORS问题。
选项http://10.2.../Mage_ang2/index.php/rest/V1/customers/1
XMLHttpRequest无法加载http://10.2.../Mage_ang2/index.php/rest/V1/customers/1。预检的响应具有无效的HTTP状态代码500
我在谷歌解决方法之后尝试了以下步骤来修复相同但不成功。
1)在magento .htaccess文件中,添加了
标题集设置Access-Control-Allow-Origin“*”
2)在上面添加的角度2代码中,
headers.append('Access-Control-Allow-Headers','Content-Type'); ...
...
3)尝试从
中的application / json更改内容类型let headers = new Headers({'Accept':'application / json'});
我缺少什么。
需要正确的解决方案来修复CORS(从magento2到angular2)问题。
建议欢迎!
答案 0 :(得分:2)
Header set Access-Control-Allow-Origin "*"
从安全角度来看,对Magento进行全球跨域访问(我理解这是一个购物平台)听起来是一个非常糟糕的主意。
headers.append('Access-Control-Allow-Headers', 'Content-Type'); ...
Access-Control-Allow-Headers
是一个响应标头。服务器必须将其发送到客户端,而不是相反。您的JS无法授予其访问其他服务器的权限。
let headers = new Headers({ 'Accept': 'application/json' });
您是否有理由认为服务器因默认设置而引发错误?
返回并查看错误消息:
预检的响应包含无效的HTTP状态代码500
然后做一些基础研究来学习what a preflight is。
然后再进行一些基础研究,找出what HTTP status code 500 means。
所以:
这意味着您需要查看服务器端代码(根本不是您的JS),并确定为什么它会导致500错误。您的服务器的错误日志将是一个开始寻找的好地方。
您需要让服务器按照the CORS documentation中的规则正确回复OPTIONS请求。
(或者,使用相同的说明,您可以尝试阻止浏览器首先发出预检请求,这可能就像删除所有尝试在请求中设置CORS响应标头一样简单#39;属于)。