如何在 Kitura 中测试 CORS?

How to test for CORS in Kitura?

任务

在 Bluemix 上托管的 Kitura 服务器上启用 CORS。

开发机
OS X 10.12.1,Swift 版本 3.0.2。

部署到
Ubuntu14.04,Swift3.0.1.

代码

我正在使用 IBM 的 Kitura-CORS 中间件来启用 CORS。

.Package(url: "https://github.com/IBM-Swift/Kitura-CORS", majorVersion: 1, minor: 4)

以下是我配置应用程序的方式:

let options = Options(allowedOrigin: .all, credentials: true, exposedHeaders: ["X-Access-Token"])
let cors = CORS(options: options)
self.router.all(middleware: cors)

调查结果

  1. 邮递员 returns 对 https://adeptness.eu-gb.mybluemix.netOPTIONS 请求 header 以下 header:

    • 连接 → Keep-Alive
    • Content-Type→text/html
    • 日期 → 2016 年 12 月 21 日,星期三 19:12:04 GMT
    • Transfer-Encoding → 分块
    • X-Backside-Transport → 好 好
    • X-Global-Transaction-ID → 4203875359
  2. 应用程序在 Test CORS 通过了对 https://adeptness.eu-gb.mybluemix.netGET 请求的测试,并报告了以下暴露的响应 headers:

    • Content-Type→text/html

问题

我不确定 CORS 是否设置正确。为什么在发现 #1 的 OPTIONS 响应中没有 X-Access-Token header?

我已经阅读了 Mozilla 关于 CORS 的文档,尽管我确实理解浏览器 pre-flight 请求并阻止所有 CORS 请求,除非服务器明确允许。我找不到关于如何在不必模拟 "test" front-end 的情况下测试 CORS server-side 的任何资源。

应该如何测试 CORS?

正如您所说,通常 CORS 是关于告诉浏览器允许哪些跨源请求,使开发人员能够突破旧的 JavaScript 沙箱,该沙箱将 XHR 请求限制在同一服务器上 HTML 页面加载自。

并非所有跨源请求都被允许。 Kitura-CORS 包允许服务器开发人员向浏览器提供有关允许哪种请求的信息。同样,这都是关于发送服务器的请求,不是关于响应。

exposedHeaders 参数使服务器开发人员能够控制发送到服务器的请求中允许包含哪些 HTTP headers。

要进行测试,您需要有一对服务器,其中一个加载了一个简单的网页,JavaScript 向第二个服务器发出 XHR 请求。两台服务器需要位于不同的域中(即,一台位于您的本地笔记本电脑上,另一台位于 Bluemix 上)。如果第二台服务器在其响应中传递了随请求一起收到的 headers,您将能够看到传递的内容。