javascript - vertx应用程序中的CORS问题不起作用

标签 javascript java cors vert.x

我的 Vertx 服务器位于服务器 A 中,客户端位于服务器 B 中。当我尝试访问 vertx 服务器时,出现 CORS 错误。我添加了一些服务器端代码来处理 CORS 问题,但它不起作用。我们是否需要在客户端添加一些 header 。我在这里想念什么?谁能帮忙

Vertx 服务器端:

Router router = Router.router(vertx);
router.route().handler(BodyHandler.create());
router.route().handler(io.vertx.rxjava.ext.web.handler.CorsHandler.create("*")
.allowedMethod(io.vertx.core.http.HttpMethod.GET)
.allowedMethod(io.vertx.core.http.HttpMethod.POST)
.allowedMethod(io.vertx.core.http.HttpMethod.OPTIONS)
.allowedHeader("Access-Control-Request-Method")
.allowedHeader("Access-Control-Allow-Credentials")
.allowedHeader("Access-Control-Allow-Origin")
.allowedHeader("Access-Control-Allow-Headers")
.allowedHeader("Content-Type"));

客户端实现:
    function(url, user) {
    eventBus = new EventBus(url);
    eventBus.onopen = function() {
            //Do Something
    }
 }

更新:

我删除了 header 中的 withCredential 属性。现在我的代码看起来像
if (ar.succeeded()) {
routingContext.response().setStatusCode(200).setStatusMessage("OK")
.putHeader("content-type", "application/json")
.putHeader("Access-Control-Allow-Origin", "*")
.putHeader("Access-Control-Allow-Methods","GET, POST, OPTIONS")
.end(
Json.encodePrettily(ar.result().body())
//(String) ar.result().body()
);
routingContext.response().close(); 

但仍然会弹出以下错误。你能帮我吗?
XMLHttpRequest cannot load https://192.168.1.20:7070/Notify/571/rn4nh0r4/xhr_send?t=1471592391921. A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true. Origin 'https://login.com' is therefore not allowed access. The credentials mode of an XMLHttpRequest is controlled by the withCredentials attribute.

更新 2:
添加我的客户地址后
.putHeader("Access-Control-Allow-Origin", "*")

我得到以下日志:
XMLHttpRequest cannot LOAD https://192.168.1.20:7070/Notify/773/k3zq1z2z/xhr_send?t=1471601521206. Credentials flag IS 'true', but the 'Access-Control-Allow-Credentials' header IS ''. It must be 'true' TO allow credentials. Origin 'https://login.com' IS therefore NOT allowed access.

我的代码如下:
 if (ar.succeeded()) {
routingContext.response().setStatusCode(200).setStatusMessage("OK")
.putHeader("content-type", "application/json")
.putHeader("Access-Control-Allow-Origin", "https://login.com")
.putHeader("Access-Control-Allow-Methods","GET, POST, OPTIONS")
.putHeader("Access-Control-Allow-Credentials", "true")
.end(
Json.encodePrettily(ar.result().body())
//(String) ar.result().body()
);
routingContext.response().close();

最佳答案

这是因为在定义路线时顺序很重要。
只需在您的 CORS 和 BodyHandler 之间切换:

Router router = Router.router(vertx);
router.route().handler(io.vertx.rxjava.ext.web.handler.CorsHandler.create("*")
.allowedMethod(io.vertx.core.http.HttpMethod.GET)
.allowedMethod(io.vertx.core.http.HttpMethod.POST)
.allowedMethod(io.vertx.core.http.HttpMethod.OPTIONS)
.allowedHeader("Access-Control-Request-Method")
.allowedHeader("Access-Control-Allow-Credentials")
.allowedHeader("Access-Control-Allow-Origin")
.allowedHeader("Access-Control-Allow-Headers")
.allowedHeader("Content-Type"));
router.route().handler(BodyHandler.create());

关于javascript - vertx应用程序中的CORS问题不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38996253/

相关文章:

javascript - 在 iOS 模拟器上运行 React-Native 应用程序

javascript - 如何在 IE 中使用 JavaScript 动态添加 <object> 标签?

java - 外部类加载Java类的内存限制

java - 使用 java 流按谓词过滤时记录过滤器的结果

cors - Haproxy CORS No 'Access-Control-Allow-Origin' header is present on the requested resource

java - Spring Boot 中的 CORS 不起作用 - 得到空响应

javascript - 使用 firebase 进行动态查询

javascript - 将基于 cheerio 的搜索循环添加到 node-simplecrawler

Java swing 异常处理程序

angular - 服务器端网络应用程序的 Google Oauth2 的 CORS 问题