You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin Multiplatform WASMJS端CORS策略报错求助

解决Kotlin Multiplatform WASM Web端的CORS跨域问题

你遇到的是浏览器的CORS(跨域资源共享)限制问题——本地开发服务器http://localhost:8080和目标接口https://google.com属于不同 origin,浏览器默认会拦截这类跨域请求。下面给你两种可行的解决办法:

方案一:给本地开发服务器添加CORS允许头

直接修改Gradle配置,让wasmJsBrowserRun启动的dev服务器返回允许跨域的响应头。在项目的build.gradle.kts(或build.gradle)中找到kotlin块下的wasmJs配置,添加devServer的headers设置:

kotlin {
    wasmJs {
        browser {
            runTask {
                devServer = devServer?.copy(
                    headers = mapOf(
                        "Access-Control-Allow-Origin" to "*",
                        "Access-Control-Allow-Methods" to "GET, POST, PUT, DELETE, OPTIONS",
                        "Access-Control-Allow-Headers" to "Content-Type, Authorization"
                    )
                )
            }
        }
        binaries.executable()
    }
    // 你的其他平台配置(Android、iOS)...
}

注意:*表示允许所有域名访问,仅适合开发环境,生产环境要替换成实际的前端域名。

方案二:配置反向代理(更推荐)

通过本地服务器转发请求,彻底规避跨域问题。修改Gradle的devServer代理配置,把目标接口映射到本地路径:

kotlin {
    wasmJs {
        browser {
            runTask {
                devServer = devServer?.copy(
                    proxy = mapOf(
                        // 把本地路径/api转发到目标域名
                        "/api" to "https://google.com"
                    )
                )
            }
        }
        binaries.executable()
    }
}

然后修改你代码中的请求地址,把https://google.com/改成/api/,这样请求会先发到本地服务器,再由服务器转发到目标地址,浏览器就不会触发CORS拦截了。

临时测试方案(不推荐用于正式开发)

如果只是临时测试,可以关闭浏览器的CORS验证:

  • Windows:启动Chrome时添加参数 chrome.exe --disable-web-security --user-data-dir="C:/ChromeDevSession"
  • Mac:启动Chrome时执行命令 open -n -a "Google Chrome" --args --disable-web-security --user-data-dir="/tmp/chrome_dev"

这种方式会降低浏览器安全性,仅用于本地临时测试。

内容的提问来源于stack exchange,提问作者Myroslav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 18:42:06