【发布时间】:2021-03-25 04:57:01
【问题描述】:
我正在使用 Javalin 制作一个 api 并尝试从 javascript 向它发送数据,但是每当我尝试这样做时都会遇到 cors 错误。我可以很好地接收数据,但不能发送数据。这是我的错误:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态。
-----------javascript-----------
function sendOurAjax(){
console.log("ajax using fetch")
let ourCustomSuper = {
"name": "SpaceMonkey",
"superpower": "person atmosphere",
"bounty": 0
}
fetch(`http://localhost:8000/api`, {
method: "post",
'headers': {
'Content-Type': 'application/json',
'BARNACLES': 'custom header value'
},
'body': JSON.stringify(ourCustomSuper)
})
.then(
function(daResponse){
console.log(daResponse);
const convertedResponse = daResponse.json();
return convertedResponse;
}
).then(
function(daSecondResponse){
console.log("Fetch is a thing. We did it.");
console.log(daSecondResponse);
}
).catch(
(stuff) => {console.log("this sucker exploded")}
)
}
-----------java-----------
app.get("/api", context ->{
context.header("Access-Control-Allow-Origin", "*");
context.header("Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS");
context.header("Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token");
System.out.println("The endpoint method has fired");
context.result("endpoint handler has fired");
context.json(myList);
});
【问题讨论】:
-
嗯,会导致 cors 的一件事是,如果您从硬盘驱动器打开您的应用程序而不是将其上传到服务器......所以您从硬盘驱动器中打开测试文件url ,但是从 localhost 调用 ajax : 8080 corse 被触发,因为 chrome 认为这是不安全的新域,就像您填写 Web 表单并且某些黑客脚本正在将表单数据窃取到 DNS 服务器一样
标签: javascript java javalin