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

Kotlin多平台项目中Ktor服务器的CORS跨域问题求助

解决Ktor服务器CORS跨域问题

核心问题

你的Web客户端(运行在localhost:8081)向Ktor服务器(localhost:8080)发起请求时,服务器未返回正确的CORS响应头,导致浏览器拦截请求。以下是完整修复方案:

步骤1:添加CORS依赖

确保项目引入Ktor的CORS插件依赖(以Gradle Kotlin DSL为例):

dependencies {
    implementation("io.ktor:ktor-server-cors-jvm:$ktor_version")
    // 其他项目依赖...
}

将$ktor_version替换为你使用的Ktor版本(如2.3.3)。

步骤2:正确配置服务器CORS

在Application.module中安装并配置CORS插件,确保允许客户端的源、请求方法和必要头信息:

fun Application.module() {
    // 安装CORS插件并配置规则
    install(CORS) {
        // 精确允许Web客户端的源地址
        allowHost("localhost:8081")
        // 允许GET请求(匹配你的接口方法)
        allowMethod(HttpMethod.Get)
        // 允许Content-Type头,适配JSON格式的请求/响应
        allowHeader(HttpHeaders.ContentType)
        // 若需要携带Cookie等凭证,开启此项
        allowCredentials = true
        // 设置预检请求的缓存时长,减少重复预检请求
        maxAgeInSeconds = 3600
    }

    routing {
        get("/repos/octocat/Spoon-Knife/forks") {
            call.respondText(forksJson(), ContentType.Application.Json, HttpStatusCode.OK)
        }
    }
}

常见错误排查

  • 若之前配置过CORS,检查是否精确指定了客户端的完整源(必须包含端口8081,不能只写localhost);
  • 无需在客户端手动添加Access-Control-Allow-Origin头,该头只能由服务器返回;
  • 确保CORS插件的配置规则完整,不要遗漏必要的方法或头。

验证

重启Ktor服务器,重新发起客户端请求,浏览器的CORS拦截错误即可消除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:07:18