Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么服务器要删除我的头_Java_Angularjs_Jakarta Ee - Fatal编程技术网

Java 为什么服务器要删除我的头

Java 为什么服务器要删除我的头,java,angularjs,jakarta-ee,Java,Angularjs,Jakarta Ee,我们正在开发一个带有angularjs前端和JavaEE后端的web应用程序 当我们试图从前端联系后端时,我们收到一个错误,因为服务器位于前端以外的另一个域上。我一直在阅读跨域请求,我认为服务器为响应设置了所需的头。以下是后端代码: private void fixHeader(HttpServletResponse response) { response.addHeader("Access-Control-Allow-Origin", "http://localhost:8383")

我们正在开发一个带有angularjs前端和JavaEE后端的web应用程序

当我们试图从前端联系后端时,我们收到一个错误,因为服务器位于前端以外的另一个域上。我一直在阅读跨域请求,我认为服务器为响应设置了所需的头。以下是后端代码:

private void fixHeader(HttpServletResponse response) {
    response.addHeader("Access-Control-Allow-Origin", "http://localhost:8383");
    response.addHeader("Access-Control-Allow-Methods", "GET, PUT, POST, OPTIONS, DELETE");
    response.addHeader("Access-Control-Allow-Headers", "Content-type");
    response.addHeader("Access-Control-Max-Age", "86400");
    response.addHeader("Access-Control-Request-Headers", "X-Requested-With, accept, content-type");
    System.out.println(response.getHeaderNames().toString());
}

@Override
protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    fixHeader(resp);
}
这是来自前端的http请求

多洛金函数

 this.doLogin = function(user) {

        var user = {"data": user};
        console.log("test before login http " + JSON.stringify(user));


        return $http({
            method: 'POST',
            url: 'http://localhost:8080/myInnovationBackend/Login',
            headers: {'Content-Type': 'application/json'},
            data: user
        })

    };
和登录控制器:

 loginService.doLogin(user)
            .success(function (data) 
            {
               $scope.loginStatus = data;


                var message = $scope.loginStatus.data.status;
                console.log("test on get: " + message);

                if(message ==='ok'){
                $location.url('/loggedIn');
                console.log("OK")
                }
            })
            .error(function(data)   
            {
            console.log("test after error" + JSON.stringify(data));    
            return data ;
            });
据我在网上看到的,这应该足够了。但是当我们从前端登录时,它会到达错误函数

XMLHttpRequest cannot load http://localhost:8080/myInnovationBackend/Login. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8383' is therefore not allowed access. frontPage.html:1
test after error""

以前有人犯过这个错误吗?

刚刚开始工作。我认为我误解了期权法的概念。因此,我将我的FixHeader添加到doPost方法中,然后它就工作了

所以不是

private void fixHeader(HttpServletResponse response) {
response.addHeader("Access-Control-Allow-Origin", "http://localhost:8383");
response.addHeader("Access-Control-Allow-Methods", "GET, PUT, POST, OPTIONS, DELETE");
response.addHeader("Access-Control-Allow-Headers", "Content-type");
response.addHeader("Access-Control-Max-Age", "86400");
response.addHeader("Access-Control-Request-Headers", "X-Requested-With, accept, content-type");
System.out.println(response.getHeaderNames().toString());
}

@Override
protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    fixHeader(resp);
}
我做到了:

private void fixHeader(HttpServletResponse response) {
    response.addHeader("Access-Control-Allow-Origin", "http://localhost:8383");
    response.addHeader("Access-Control-Allow-Methods", "GET, PUT, POST, OPTIONS, DELETE");
    response.addHeader("Access-Control-Allow-Headers", "Content-type");
    response.addHeader("Access-Control-Max-Age", "86400");
    response.addHeader("Access-Control-Request-Headers", "X-Requested-With, accept, content-type");
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws     ServletException, IOException {
    fixHeader(response);
}

@Override
protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    fixHeader(resp);
}

您是否验证了标题是否确实存在?例如,使用Chrome开发者控制台中的网络选项卡。正在从服务器发送两个响应。第一个响应包含标题,例如访问控制允许来源:访问控制允许方法:GET、PUT、POST、OPTIONS、DELETE访问控制允许标题:内容类型访问控制最大年龄:86400访问控制请求标题:X-Request-With、accept、Content-type和服务器返回OK答案的另一个响应。