【发布时间】:2019-08-04 22:44:52
【问题描述】:
我一直在尝试使用 PUT 请求更新某个表中的值。但是,我不断收到这些错误,我不知道为什么:
OPTIONS http://localhost:8080/api/ping/1001 404 (Not Found)
和
Access to XMLHttpRequest at 'http://localhost:8080/api/ping/1001' from origin 'http://localhost:63342' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
每当我将请求切换为 GET 请求时,它都会起作用。
我的后台
embeddedServer(Netty, 8080) {
routing {
get("/api/ping/{num?}"){
var nsq_num: Int = Integer.valueOf(call.parameters["num"]?: "1001")
var stmt: Statement? = null
var resultset: ResultSet? = null
val obj = arrayListOf<SRTEntry>()
.....
.....
val gson = Gson()
var str = gson.toJson(obj)
call.response.header("Access-Control-Allow-Origin", "*")
call.respondText(str, ContentType.Application.Json)
}
put("/api/ping/{num?}"){
var nsq_num: Int = Integer.valueOf(call.parameters["num"]?: "1001")
var stmt: PreparedStatement? = null
var resultset: ResultSet? = null
val obj = arrayListOf<SRTEntry>()
.....
.....
val gson = Gson()
var str = gson.toJson(obj)
call.response.header("Access-Control-Allow-Origin", "*")
call.respondText(str, ContentType.Application.Json)
}
调用 PUT 请求的前端
var url = "http://localhost:8080/api/ping/1001";
var req = new XMLHttpRequest();
req.onload = function(event){
if (parseInt(req.status, 10) != 200) {
return;
}
var text = req.responseText;
console.log(text);
}
req.open("PUT", url, true);
req.send();
调用 GET 请求:
var url = "http://localhost:8080/api/ping/1001";
var req = new XMLHttpRequest();
req.onload = function(event){
if (parseInt(req.status, 10) != 200) {
return;
}
var text = req.responseText;
console.log(text);
}
req.open("GET", url, true);
req.send();
提前感谢您的帮助!
【问题讨论】:
-
CORS 不仅仅是一个响应头。确保服务器也在处理 OPTIONS 请求
-
@charlietfl 说了什么。浏览器将向所有 url 路径发送预检选项请求,您必须使用正确的标头进行响应。另外,您获得 CORS 的原因是 Web 浏览器将不同的端口视为不同的来源,即使请求是针对 localhost 的。
-
感谢我能够修复它! dev.to/effingkay/cors-preflighted-requests--options-method-3024 有很好的问题信息!
-
@hm1233 请求您将答案标记为已关闭。更喜欢写一个答案并结束。
标签: javascript kotlin xmlhttprequest httprequest netty