任务
在 Bluemix 上托管的 Kitura 服务器上启用 CORS。
开发机
OS X 10.12.1,Swift 版本 3.0.2。
部署到
Ubuntu 14.04、Swift 3.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)
调查结果
从 Postman 到
https://adeptness.eu-gb.mybluemix.net
的OPTIONS
请求返回以下 header :- 连接 → 保持事件状态
- 内容类型 → 文本/html
- 日期 → 2016 年 12 月 21 日星期三 19:12:04 GMT
- 传输编码 → 分块
- X-Backside-Transport → OK OK
- X-Global-Transaction-ID → 4203875359
应用程序通过了 Test CORS 的测试对于
https://adeptness.eu-gb.mybluemix.net
的GET
请求并报告以下暴露的响应 header :- 内容类型 → 文本/html
问题
我不完全确定 CORS 是否设置正确。为什么在 Finding #1 的 OPTIONS
响应中没有 X-Access-Token
header ?
我已经阅读了 Mozilla 关于 CORS 的文档,虽然我明白浏览器会预先请求并阻止所有 CORS 请求,除非服务器明确允许。我找不到关于如何在不必模拟“测试”前端的情况下测试 CORS 服务器端的任何资源。
应该如何测试 CORS?
最佳答案
正如您所说,一般来说,CORS 是关于告诉浏览器允许哪些跨源请求,使开发人员能够摆脱旧的 JavaScript 沙箱,该沙箱将 XHR 请求限制在加载 HTML 页面的同一服务器上。
并非所有跨源请求都是允许的。 Kitura-CORS 包允许服务器开发人员向浏览器提供有关允许何种请求的信息。同样,这都是关于发送到服务器的请求,而不是响应。
exposedHeaders 参数使服务器开发人员能够控制发送到服务器的请求中允许包含哪些 HTTP header 。
要进行测试,您需要有一对服务器,其中一个加载了一个简单的网页,该网页具有向第二个服务器发出 XHR 请求的 JavaScript。两台服务器需要位于不同的域中(即,一台位于您的本地笔记本电脑上,另一台位于 Bluemix 上)。如果第二台服务器在其响应中传递了它随请求收到的 header ,您将能够看到传递的内容。
关于linux - 如何在 Kitura 中测试 CORS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41271466/