请求本地主机服务器 运行 SparkJava 使用邮递员工作,但不能使用浏览器中的 javascript

Requests to a localhost server running SparkJava work using postman, but not with javascript in a browser

我有这个简单的服务器运行使用 SparkJava 从 eclipse API:

public static void main(String[] args) {

    BasicConfigurator.configure();
    staticFileLocation("/public");
    port(5678);
    enableCORS("*", "*", "*");

    get("/hello", (request, response) -> "Hello World!");

    post("/hello", (request, response) ->
        "Hello World: " + request.body()
    );
}



private static void enableCORS(final String origin, final String methods, final String headers) {

    options("/*", (request, response) -> {

        String accessControlRequestHeaders = request.headers("Access-Control-Request-Headers");
        if (accessControlRequestHeaders != null) {
            response.header("Access-Control-Allow-Headers", accessControlRequestHeaders);
        }

        String accessControlRequestMethod = request.headers("Access-Control-Request-Method");
        if (accessControlRequestMethod != null) {
            response.header("Access-Control-Allow-Methods", accessControlRequestMethod);
        }

        return "OK";
    });

    before((request, response) -> {
        response.header("Access-Control-Allow-Origin", origin);
        response.header("Access-Control-Request-Method", methods);
        response.header("Access-Control-Allow-Headers", headers);
        // Note: this may or may not be necessary in your particular application
        response.type("application/json");
    });
}

我从网页上得到了这个 Javascript 运行ning:

var oReq = new XMLHttpRequest();
oReq.open("POST", "localhost:5678/hello", true);
var test = oReq.send("TESTING");
document.getElementById("TEST").innerHTML = test;

当我通过 Postman chrome 应用程序发送请求时,我可以发送请求并获得响应,但是当我 运行 chrome 中的此脚本时,我收到以下错误:

XMLHttpRequest 无法加载 localhost:5678/你好。仅协议方案支持跨源请求:http、data、chrome、chrome-extension、https.

我也在 Firefox 和 Edge 中尝试 运行ning 脚本,但我仍然遇到网络错误。为什么请求在 Postman 中有效,但在 运行 从任何浏览器中调用脚本时却无效?

它通过 Postman 工作,因为您直接调用服务器。这里不涉及 CORS。但是当你通过 javascript 做到这一点时,CORS 就会发挥作用。我看到你已经添加了相应的 headers。那应该可以解决问题。但是请求 url 不包含 http 方案。您需要将 localhost:5678/hello 更改为 http://localhost:5678/hello