Angular 当端点不存在时,如何解决CORS问题';你不接受期权法吗?
我正在为易于管理的Magento电子商务商店构建移动客户端应用程序,我;我使用基于令牌的身份验证,我使用ionic2作为我的移动框架 我的问题是,由于端点不支持Angular 当端点不存在时,如何解决CORS问题';你不接受期权法吗?,angular,.htaccess,magento,ionic2,Angular,.htaccess,Magento,Ionic2,我正在为易于管理的Magento电子商务商店构建移动客户端应用程序,我;我使用基于令牌的身份验证,我使用ionic2作为我的移动框架 我的问题是,由于端点不支持选项方法,因此将角度HTTP发送到选项请求,而不是POST到产生400错误请求的端点 这是我的代码: import { Injectable } from '@angular/core'; import { Http, Headers, RequestOptions } from '@angular/http';
选项
方法,因此将角度HTTP发送到选项
请求,而不是POST
到产生400错误请求的端点
这是我的代码:
import { Injectable } from '@angular/core';
import { Http, Headers, RequestOptions } from '@angular/http';
import 'rxjs/add/operator/map';
import { BaseConfig } from '../../config';
@Injectable()
export class AuthProvider {
public data: any;
public option: any;
constructor(public http: Http) {
console.log('Hello AuthProvider Provider');
}
login(creds: any) {
let headers = new Headers({
'Content-Type': 'application/json'
});
let option = new RequestOptions({
headers: headers,
});
return new Promise((resolve) => {
this.data = this.http.post(BaseConfig.base_url + 'integration/admin/token', creds, option)
.map(res => res.json())
.subscribe((data) => {
resolve(this.data);
},
(error) => {
resolve(this.data);
}
);
});
}
}
我还在.htaccess上包含CORS头
Header add Access-Control-Allow-Origin: "*"
Header add Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"
Header add Access-Control-Allow-Headers: "Content-Type"
所以真正的问题是如何防止使用OPTIONS
方法请求角度http(我认为这是不可能的,因为是预引导请求)
谢谢 您可以在两者之间添加自己的服务器(如代理服务器),该服务器(从同一URL+端口加载HTML内容时不需要CORS)
或者您可以使用JSONP,尽管它非常有限
否则,您需要将服务器配置为支持选项
。OPTIONS
请求是一个飞行前请求,如果浏览器没有从OPTIONS
请求中获得预期的响应,则不会发出POST
请求。可能在下面的示例中,它可以为您提供所需的东西
login(creds: any) {
let headers = new Headers({
'Content-Type': 'application/json',
});
let option = new RequestOptions({
headers: headers,
withCredentials:true
});
return new Promise((resolve) => {
this.data = this.http.post(BaseConfig.base_url + 'integration/admin/token', creds, option)
.map(res => res.json())
.subscribe((data) => {
resolve(this.data);
},
(error) => {
resolve(this.data);
}
);
});
}
我不知道原因,但我认为您应该在真正的设备上试用。您不能更改后端以接受选项
请求吗CORS
请求不是一个角度问题,而是一个浏览器问题。这是CORS标准要求浏览器的行为方式。所以,我应该删除添加到.htaccess的自定义标题吗?在这种情况下,如果您从浏览器中运行的前端JavaScript直接向该端点发出请求,则无法避免预飞行-只要该端点要求文章的内容类型为“Content Type:application/json”或“内容类型:应用程序/xml“,它是根据。您唯一的选择是在前端JavaScript调用和服务器之间放置一些代理,或者只在后端代码中执行所有操作。我尝试使用Chrome扩展来实现这一点,但没有解决问题,,,我自己还没有尝试Chrome扩展来解决CORS问题,但我听说它是有效的。我不知道为什么它不适合你。ente siapa ya…?谢谢你的解决方案解决了我的问题:D我不知道为什么,但部署到真正的设备上成功了。。。。!