javascript - $http header存在跨域访问问题

标签 javascript angularjs rest jersey

通过 Angularjs $http 将带有 JSON 数据的请求发送到我的 REST 服务。当返回响应时,所需的 header 设置如下,

Response.ok()
.entity(emp)
.headers.add("Access-Control-Allow-Origin", "*")
.headers.add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT")
.allow("OPTIONS").build();

但是当我发送没有数据的post请求时,

$http.post('localhost:8000/employer/register')  

成功了。有了数据,它就失败了。

$http({method: 'post', url:serverUrl, data:{name:'abc'}, headers:{'Content-Type':'application/json'} });

这是我的休息服务

@Path("/register")
public class EmpService{

@Get
@Path("test")
@Produces
public String test(){
return "works";
}

@Post
@Consumes(MediaType.APPLICATION_JSON)
public Response addEmp(Emp emp){

return Response.ok()
.entity(emp)
.headers.add("Access-Control-Allow-Origin", "*")
.headers.add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT")
.allow("OPTIONS").build();  

浏览器控制台如下。

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:8081/employer/register (Reason: CORS header 'Access-Control-Allow-Origin' missing).  
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:8081/employer/register (Reason: CORS request failed). 

更新:我发现服务未被调用,因为 Sys.out.println 没有提供任何日志。 有谁知道问题出在哪里吗?

最佳答案

不要在资源方法内添加 header 。为什么?预检是一个 OPTIONS 请求,它是获取访问控制 header 的“预”请求。而且你没有 OPTIONS 方法。浏览器不会调用@POST方法来获取访问控制 header 。因此,您应该 using a filter instead ,然后设置标题那里

关于javascript - $http header存在跨域访问问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37035446/

相关文章:

javascript - Javascript 对象中的意外作用域行为

javascript - ng-repeat 和 $scope 问题

php - 将标题分成两半,或尽可能靠近中间

javascript - ngStorage 和 $window.localStorage 的区别

javascript - 如何在 Protractor 中截取整个页面的屏幕截图?

javascript - 在 AngularJS 中扩展数组而不是替换

rest - 在 Web 应用程序中存储用户名和密码

c# - 使用 C# 删除 SharePoint 文件夹中的文件

java - 是否有为 Spring 3 REST Controller 生成 JSON SMD 的解决方案?

javascript - 在 javascript 中转换为 e+ 的脚本