Vapor文档学习卅四: HTTP -CORS

CORS(Cross-Origin Resource Sharing),跨原始资源共享。Vapor默认使用CORSMiddleware实现了一定程度的跨资源共享。
“CORS是允许真正开放性跨域访问的规范。如果你的服务器提供了公共资源,请在通用的JavaScript驱动的浏览器中借助CORS进行访问。”--https://enable-cors.org/。
如果要了解更多关于Middleware的知识,请参考Middleware章节。

Vapor文档学习卅四: HTTP -CORS_第1张图片
CORS.png

图片作者: Wikipedia

Basic

首先将CORS的middleware添加到Droplet中:

# Insert CORS before any other middlewares
drop.middleware.insert(CORSMiddleware(), at: 0)

注意:确保在任何其他middleware之前插入CORSmiddleware,如AbortMiddleware或类似的。 否则,正确的header可能不会添加到响应中。

CORSMiddleware的默认配置能够满足多数用户使用,配置值如下:

  • Allowed Origin
    • 请求中原始header的值
  • Allowed Method
  • GET,POST, PUT, OPTIONS, DELETE, PATCH
  • Allowed Headers
  • Accept, Authorization, Content-Type, Origin, X-Requested-With

Advanced

所有设置和预设可以由高级用户自定义。 有两种方式可以进行自定义设置:1,通过代码创建和配置CORSConfiguration对象;2,将配置置于Vapor的JSON配置文件中。
有关如何设置这两个选项,请参见以下内容。

Configuration

CORSConfiguration结构体是用来配置CORSMiddleware的。下面是对其进行实例化:

let configuration = CORSConfiguration(allowedOrigin: .custom("https://vapor.codes"),
                                          allowedMethods: [.get, .post, .options],
                                          allowedHeaders: ["Accept", "Authorization"],
                                          allowCredentials: false,
                                          cacheExpiration: 600,
                                          exposedHeaders: ["Cache-Control", "Content-Language"])

配置完成之后可以添加CORSMiddleware了:

drop.middleware.insert(CORSMiddleware(configuration: configuration), at: 0)

注意:如果想了解更多可以配置的值,请查看CORSConfiguration的源码。

JSON Config

另外,CORSMiddleware可以使用由Config文件夹中包含的.json文件进行配置。 你需要在项目的Config文件夹中创建一个名为cors.jsonCORS.json的文件,并添加所需的键值(配置项)。
示例:

{
    "allowedOrigin": "origin",
    "allowedMethods": "GET,POST,PUT,OPTIONS,DELETE,PATCH",
    "allowedHeaders": ["Accept", "Authorization", "Content-Type", "Origin", "X-Requested-With"]
}

注意:allowedOriginallowedMethodsallowedHeaders是必须配置的。 如果不存在,则会在实例化middleware时抛出异常。
另外,allowCredentials(Bool),cacheExpiration(Int)和exposedHeaders([String])是可选的配置。

然后可以通过接收Config的初始化方法重载配置信息,并将middleware添加到Droplet中。

let drop = Droplet()

do {
    drop.middleware.insert(try CORSMiddleware(configuration: drop.config), at: 0)
} catch {
    fatalError("Error creating CORSMiddleware, please check that you've setup cors.json correctly.")
}

你可能感兴趣的:(Vapor文档学习卅四: HTTP -CORS)