Angular/Ionic中使用PUT方法遇到OPTIONS问题的解决方案

开发Angular/Ionic中遇到使用PUT方法遇到OPTIONS问题,使用PUT方法返回405错误,查了许久,看到这篇博文。

http://my.oschina.net/blogshi/blog/303758?fromerr=ALJoxiKg
CORS的本质让服务器通过新增响应头Access-Control-Allow-Origin,通过HTTP方式来实现资源共享,让每个请求的服务直接返回资源.它使用了HTTP交互方式来确定请求源是否有资格请求该资源,并且通过设置HTTP Header来控制访问资源的权限.

因此需要在后端拦截OPTIONS方法,在headers中返回如下信息:

Access-Control-Allow-Origin: “*”

Access-Control-Allow-Methods: “PUT”

Access-Control-Max-Age: “60”
 

返回以上信息基本流程就可以处理下去了。

 

但是开发中还遇到了PUT方法payload提交不正确,需要把提交的数据转换成JSON格式。原理是直接JSON.stringify()一下:

login: function (user) {
var data = {
‘_format’: ‘json’,
‘password’: md5(user.password),
‘verifyCode’: user.verifyCode,
‘sessionMark’: user.sessionMark
};
data = JSON.stringify(data);
return $http({
method: ‘PUT’,
url: HOST_URL + “/user/“ + user.userName + “/apiKey”,
data: data
}).success(function (response) {
localStorage.removeItem(‘user’);
USER = response;
}).error(function (data, status, headers, config) {
if (status == ‘404’) {
$ionicLoading.show({
template: ‘找不到该用户’,
duration: 2000
});
} else {
$ionicLoading.show({
template: data.error.message,
duration: 2000
});
}
});
},