Enable Cross-Origin Resource Sharing (CORS)

预计阅读时间:2分钟

默认情况下,Ktor提供拦截器,以实现对跨域资源共享(CORS)的适当支持.

跨域资源共享(CORS)是一项允许跨域边界真正开放访问的规范. 如果您提供公共内容,请考虑使用CORS将其打开以进行通用JavaScript /浏览器访问. enable-cors.org

此功能在io.ktor.features.CORS类中io.ktor.features.CORS ,不需要其他工件.

Basic

首先,将CORS功能安装到您的应用程序中.

fun Application.main() {
  ...
  install(CORS)
  ...
}

CORS功能的默认配置仅处理GETPOSTHEAD HTTP方法以及以下标头:

  HttpHeaders.Accept
  HttpHeaders.AcceptLanguages
  HttpHeaders.ContentLanguage
  HttpHeaders.ContentType

Advanced

这是一个高级示例,演示了大多数与CORS相关的API函数

fun Application.main() {
  ...
  install(CORS)
  {
    method(HttpMethod.Options)
    header(HttpHeaders.XForwardedProto)
    anyHost()
    host("my-host")
    // host("my-host:80")
    // host("my-host", subDomains = listOf("www"))
    // host("my-host", schemes = listOf("http", "https"))
    allowCredentials = true
    allowNonSimpleContentTypes = true
    maxAge = Duration.ofDays(1)
  }
  ...
}

Configuration

  • method("HTTP_METHOD") :将此方法包括在使用CORS的Http方法的白名单中.
  • header("header-name") :将此标头包括在要使用CORS的标头白名单中.
  • exposeHeader("header-name") :在响应中公开此标头.
  • exposeXHttpMethodOverride() :在响应中公开X-Http-Method-Override标头
  • anyHost() :允许任何主机访问资源
  • host("hostname") :仅允许指定的主机使用CORS,它可以具有端口号,子域列表或受支持的方案.
  • allowCredentials :在响应中包括Access-Control-Allow-Credentials标头
  • allowNonSimpleContentTypes :将Content-Type请求标头包含在白名单中,以获取除简单内容类型以外的其他值.
  • maxAge :在响应中包含具有给定最大年龄的Access-Control-Max-Age标头

by  ICOPY.SITE