如何在Ktor中完全禁用CORS,实现全类型跨域请求允许配置?
Ktor完全放开/禁用CORS配置方案
方案1:基于官方CORS插件配置
默认anyHost()仅放开跨域域名限制,不会放开请求方法、请求头的限制,需要额外补充配置:
install(CORS) { // 允许所有跨域来源 anyHost() // 允许所有请求方法,包含自定义非标准方法 allMethods() // 允许所有请求头,包含业务自定义头 allowHeader("*") // 允许前端获取所有响应头 exposeHeader("*") // 若需要允许前端携带凭证(Cookie、授权头)可添加以下配置,注意此时origin不能用*通配,无相关需求可省略 // allowCredentials = true // 可选配置:调整预检请求缓存时长,减少重复预检请求 maxAgeInSeconds = 3600 }
方案2:手动添加响应头(完全绕过CORS插件)
如果不需要使用官方CORS插件,可以直接通过拦截器全局添加跨域头,同时处理预检请求:
routing { // 优先处理所有OPTIONS预检请求 options("{...}") { call.response.header("Access-Control-Allow-Origin", "*") call.response.header("Access-Control-Allow-Methods", "*") call.response.header("Access-Control-Allow-Headers", "*") call.respond(HttpStatusCode.OK) } // 拦截所有响应,统一注入跨域头 intercept(ApplicationCallPipeline.Plugins) { call.response.header("Access-Control-Allow-Origin", "*") call.response.header("Access-Control-Allow-Methods", "*") call.response.header("Access-Control-Allow-Headers", "*") proceed() } // 业务路由写在下方即可 // ... }
注意:生产环境不建议直接使用
*通配,存在安全风险,建议根据实际业务场景限定允许的域名、方法和请求头。
内容的提问来源于stack exchange,提问作者Sasha Shpota
相关产品推荐
相关产品推荐

