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
相关产品推荐
相关产品推荐

