我有一个我使用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插件,它可以正常工作,但我无法请求用户安装插件以使用我的网站。有谁知道我错过了什么?我已经进行了一段时间的搜索,我找到的唯一解决方案是禁用此浏览器安全性(我不能要求用户这样做)并在请求中添加标题,我已经拥有。
答案 0 :(得分:0)
我终于能够解决我的问题了。问题出在我的页面和服务器之间的通信中。 CORS块由浏览器强加,服务器需要发送一个授权访问的头(我在问题中放入函数的头)。我缺少的是OPTION
方法中的标题。我的JavaScript代码会在实际OPTIONS
或preflight request
方法之前自动发送并GET
请求(POST
)。我所做的是在服务器中手动实现响应必要标头的OPTIONS
方法。