【问题标题】:PUT request access blockedPUT 请求访问被阻止
【发布时间】: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


【解决方案1】:

添加

install(CORS){
            method(HttpMethod.Put)
            anyHost()
        }

在路由之前为我修复它如下所示:

install(CORS){
    method(HttpMethod.Put)
    anyHost()
}
routing {
   get("/api/ping/{num?}"){
   var nsq_num: Int = Integer.valueOf(call.parameters["num"]?: "1001")
   var stmt: Statement? = null
   var resultset: ResultSet? = null
   ...

您可以从https://dev.to/effingkay/cors-preflighted-requests--options-method-3024获得更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-25
    • 2019-01-21
    • 2015-07-04
    • 1970-01-01
    • 2015-02-08
    • 2019-11-04
    • 2017-02-06
    • 1970-01-01
    相关资源
    最近更新 更多