始终得到方法 DELETE 不允许在印前检查响应中的访问控制允许方法

2022-09-01 15:50:14

我使用球衣作为我的休息API实现。在前端,我使用angularjs$http服务来发出http请求。当我请求删除方法时,我总是收到以下错误。

"Method DELETE is not allowed by Access-Control-Allow-Methods in preflight response."  

我读了一些文章,他们说我需要允许在“访问控制-允许-方法”上删除。我已经设置了响应过滤器,如下所示,但它仍然有这样的问题。我还应该做什么?

@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");
        });

答案 1

经过一些测试,我找到了解决方案。我将 allow 方法放在标头上,如下所示,然后它就可以工作了。我不知道为什么“*”不起作用。

headers.add("Access-Control-Allow-Methods", "GET, POST, OPTIONS, PUT, DELETE");

答案 2

值 “*” 仅计为没有凭据的请求(没有 HTTP cookie 或 HTTP 身份验证信息的请求)的特殊通配符值。在具有凭据的请求中,它被视为没有特殊语义的文字方法名称“*”。

来源 : https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Methods


推荐