Kitura-CORS 是一个跨域资源共享 (CORS) 中间件。由某个服务提供的网页或脚本可能包含对托管在另一个域中的资源或服务的引用 - 例如公共服务或资源。浏览器对此类资源的请求是跨域请求的一个例子,并且通常被 同源安全策略禁止。
CORS 允许您以受控方式绕过同源限制,以便可以在不同域之间共享资源。支持 CORS 的客户端会向在域 B 托管资源的服务发出一个“预检”请求,其中包含指定域 A 的 Origin
标头。然后,该服务可以使用 Access-Control-Allow-Origin
标头响应客户端,该标头指示是否应允许访问此资源。
您可以在 Kitura 应用程序中使用 CORS 中间件来授权外部服务访问您提供的资源或 API。
最新版本的 Kitura-CORS 需要 Swift 4.1.2。您可以通过点击此链接下载此版本的 Swift 二进制文件。不保证与其他 Swift 版本的兼容性。
将 Kitura-CORS
包添加到应用程序的 Package.swift
文件中的依赖项中。 将 "x.x.x"
替换为最新的 Kitura-CORS
版本。
.package(url: "https://github.com/Kitura/Kitura-CORS.git", from: "x.x.x")
将 KituraCORS
添加到您的目标的依赖项中
.target(name: "example", dependencies: ["KituraCORS"]),
import KituraCORS
要创建 Kitura-CORS 中间件的实例,请使用
public init(options : Options)
其中可能的 Options
是
Access-Control-Allow-Origin
CORS 服务器响应头。可能的值有Access-Control-Allow-Origin
将设置为 *
。这是默认值。Access-Control-Allow-Origin
将设置为来自 RouterRequest
标头的 Origin。Access-Control-Allow-Credentials
CORS 标头。只有当 credentials 为 true
时才设置标头,否则不传递标头。默认为 false
。Access-Control-Allow-Methods
标头中传递的方法数组。 要传递的默认方法集是 ["GET","HEAD","PUT","PATCH","POST","DELETE"]
。Access-Control-Allow-Headers
CORS 标头的允许标头的数组。 如果未指定,则传递请求的 Access-Control-Request-Headers
标头中指定的标头。Access-Control-Allow-Max-Age
标头。如果未设置,则省略该标头。Access-Control-Expose-Headers
标头的公开标头的数组。如果未设置,则省略该标头。false
,这意味着 CORS 中间件将立即向客户端发送适当的响应。有关 CORS 的更多信息,请参阅 CORS 文档。
首先创建一个 CORS
实例。在以下示例中,资源作者有一个资源,他们希望 http://www.abc.com 能够访问。实际请求中只能使用 GET 和 PUT 方法,响应可以缓存 5 秒,并且实际请求中将仅使用 Content-Type 标头
import Kitura
import KituraCORS
let options = Options(allowedOrigin: .origin("http://www.abc.com"),
methods: ["GET","PUT"],
allowedHeaders: ["Content-Type"],
maxAge: 5)
let cors = CORS(options: options)
Kitura-CORS 实现了 RouterMiddleware 协议;因此,要将中间件连接到您的路径,您需要使用 Router
方法之一,例如
let router = Router()
router.all("/cors", middleware: cors)
有关更多信息,请访问我们的 API 参考。
我们喜欢讨论服务器端 Swift 和 Kitura。 加入我们的 Slack 与团队见面!
此库已获得 Apache 2.0 许可。完整的许可文本可在 LICENSE 中找到。