我正在使用泽西作为我的restful api实现。在前端,我使用angularjs $ http服务来发出http请求。当我请求删除方法时,我总是遇到错误。
"Method DELETE is not allowed by Access-Control-Allow-Methods in preflight response."
我读了一些文章,他们说我需要允许删除“Access-Control-Allow-Methods”。我已经设置了如下的响应过滤器,但它仍然存在这样的问题。我还应该做什么?
@Provider
public class CORSResponseFilter implements ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
MultivaluedMap<String, Object> headers = responseContext.getHeaders();
headers.add("Access-Control-Allow-Origin", "*");
headers.add("Access-Control-Allow-Methods", "*");
}
}
下面是我提出请求的角度代码:
$http({
method: 'DELETE',
url: remoteUrl,
headers : {'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',
'ACCESS_TOKEN' : $cookieStore.get("access_token")
},
data : $httpParamSerializer({
'id':id
})
}).success(function(data,status,headers,config) {
$scope.refreshDepartments();
console.log(data);
alert("success");
}).error(function(data,status,headers,config){
console.log(data);
alert("error");
});
答案 0 :(得分:17)
经过一些测试,我找到了解决方案。我把allow方法放在标题上,如下所示,然后就可以了。我不知道为什么&#34; *&#34;不起作用。
headers.add("Access-Control-Allow-Methods", "GET, POST, OPTIONS, PUT, DELETE");
答案 1 :(得分:0)
尝试使用CORS扩展程序进行chrome,它帮助了我一次。
修改强>
这是因为angular会在请求标头中添加X-Header键。
X-Headers通常定义或设置HTTP req / res
的操作参数
您可以通过将请求的内容类型修改为“text / plain”或“application / x-www-form-urlencoded”或<来解决此问题。 EM> “多部分/格式数据”
您可以在应用配置中使用拦截器来执行此操作。
修改强>
将此添加到您的服务器代码 -
header('Access-Control-Allow-Headers: X-Requested-With');
尝试将内容类型更改为 text / plain
希望这有帮助。