Java 为什么服务器要删除我的头
我们正在开发一个带有angularjs前端和JavaEE后端的web应用程序 当我们试图从前端联系后端时,我们收到一个错误,因为服务器位于前端以外的另一个域上。我一直在阅读跨域请求,我认为服务器为响应设置了所需的头。以下是后端代码: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")
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答案的另一个响应。