Cors блокирует клиентский доступ к локальному vertx-серверу - PullRequest
0 голосов
/ 23 октября 2019

У меня проблемы с CORS, блокирующим доступ моего клиента к серверу vertx при получении объекта JSON через jquery. Я обнаружил, что проблема CORS в приложении vertx не работает как решение, но, похоже, что-то не так в моей реализации.

Единственное, что я тестирую, это get-invocation, но я предполагаю, что та же проблема применима ко всем API.

@Override
public void start() {

    Router router = Router.router(vertx);

    router.route().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("/api/diagrams*").handler(BodyHandler.create());
    router.post("/api/diagrams").handler(this::insert);
    router.delete("/api/diagrams/delete/:id").handler(this::delete);
    router.get("/api/diagrams/get/:id").handler(this::get);
    router.get("/api/diagrams/get/user/:username").handler(this::getByUser);

    vertx.createHttpServer()
            .requestHandler(router::accept)
            .listen(7070);
}

private void get(RoutingContext rc) {
    final String id = rc.request().getParam("id");
    if (id == null) {
        rc.response().setStatusCode(400).end();
    } else {
        UserDiagram diagram = userDiagramDao.get(id);
        if (diagram == null) {
            rc.response().setStatusCode(404).end();
        } else {
            rc.response()
                    .putHeader("content-type", "application/json; charset=utf-8")
                    // Are these necessary?
                    .putHeader("Access-Control-Allow-Origin", "*")
                    .putHeader("Access-Control-Allow-Methods", "POST, GET")
                    .putHeader("Custom-Header", "Own-Data")
                    .putHeader("Access-Control-Expose-Headers", "Custom-Header")
                    //
                    .end(Json.encodePrettily(diagram));
        }
    }
}

Ошибка Cors, как видно из f12:

jquery.min.js: 4 Доступ к XMLHttpRequest по адресу 'localhost: 7070 / api / diagrams / get / 5db07cfd5e189c7a093bf920' из источника 'http://localhost:8080' заблокирован политикой CORS: только запросы перекрестного происхожденияподдерживается для протокольных схем: http, data, chrome, chrome-extension, https. send @ jquery.min.js: 4 ajax @ jquery.min.js: 4 (анонимно) @ chart.xhtml: 21 chart.xhtml: 12 Блокировка перекрестного чтения (CORB) заблокировала ответ перекрестного происхождения http://registry.npmjs.org/node-fetch с приложением типа MIME / JSON. Смотрите https://www.chromestatus.com/feature/5629709824032768 для более подробной информации. jquery.min.js: 4 [Нарушение] Обработчик «ошибки» занял 1376 мс

Запрос от клиента проверяется следующим образом:

    var result_data;
    $.ajax({
        url: "localhost:7070/api/diagrams/get/5db07cfd5e189c7a093bf920",
        type: "GET",
        //contentType: "application/json",
        //  dataType: 'json',
        data: diagram_data,
        success: function(res) {
            result_data = res;
            alert("Success!!");
        },
        error: function(xhr, textStatus, errorThrown) {
            alert("Query failed");
        }
    });

Ошибка CORS вПриложение vertx не работает

Я также запутался, если проблема на стороне клиента или на стороне сервера.

1 Ответ

1 голос
/ 23 октября 2019

Попробуйте ввести http:// в URL запроса.

Поскольку ошибка говорит о том, что запросы поддерживаются только для протоколов http, https и т. Д ...

...