请求本地主机服务器 运行 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
我有这个简单的服务器运行使用 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