'Access-Control-Allow-Origin'出错

时间:2016-09-30 19:51:39

标签: http cors http-post httprequest

我有一个我使用angular 2制作的网页,这是一个表单,在结尾处,表单必须发送到我的java服务器。但我无法发送,我收到错误Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access.

我已经更改了我的服务器,因此会发送Access-Control-Allow标头。功能是这样的:

public static Response buildResponse(int status, Object reponseObject, MediaType mediaType) {
    Response.ResponseBuilder rb = Response.status(status).entity(reponseObject);
    if (mediaType != null) {
        rb = rb.type(mediaType);
    }
    rb = rb.header("Access-Control-Allow-Origin", "*");
    rb = rb.header("Access-Control-Allow-Methods", "GET, POST, PATCH, PUT, DELETE, OPTIONS");
    rb = rb.header("Access-Control-Allow-Headers", "Origin, Content-Type, X-Auth-Token, accept");
    rb = rb.header("Access-Control-Allow-Credentials", true);
    System.out.println("teste");
    return rb.build();
}

我还尝试将标头'Access-Control-Request-Method': 'POST'添加到页面请求中,但我仍然收到错误消息。问题不在于软件功能本身,因为如果我安装并激活chrome的CORS插件,它可以正常工作,但我无法请求用户安装插件以使用我的网站。有谁知道我错过了什么?我已经进行了一段时间的搜索,我找到的唯一解决方案是禁用此浏览器安全性(我不能要求用户这样做)并在请求中添加标题,我已经拥有。

1 个答案:

答案 0 :(得分:0)

我终于能够解决我的问题了。问题出在我的页面和服务器之间的通信中。 CORS块由浏览器强加,服务器需要发送一个授权访问的头(我在问题中放入函数的头)。我缺少的是OPTION方法中的标题。我的JavaScript代码会在实际OPTIONSpreflight request方法之前自动发送并GET请求(POST)。我所做的是在服务器中手动实现响应必要标头的OPTIONS方法。