如何在 Kitura 中测试 CORS?

Posted

技术标签:

【中文标题】如何在 Kitura 中测试 CORS?【英文标题】:How to test for CORS in Kitura? 【发布时间】:2016-12-21 20:34:42 【问题描述】:

任务

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

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

部署到 Ubuntu 14.04,斯威夫特 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.netOPTIONS 请求返回以下标头:

    连接 → 保持活动状态 内容类型 → 文本/html 日期 → 2016 年 12 月 21 日星期三 19:12:04 GMT 传输编码 → 分块 X-Backside-Transport → OK OK X-Global-Transaction-ID → 4203875359

    该应用通过Test CORS 的测试,通过GET 请求https://adeptness.eu-gb.mybluemix.net 并报告以下公开的响应标头:

    内容类型 → 文本/html

问题

我不完全确定 CORS 是否设置正确。为什么在 Find #1 的 OPTIONS 响应中没有 X-Access-Token 标头?

我已经阅读了 Mozilla 关于 CORS 的文档,尽管我确实理解浏览器会在飞行前请求并阻止所有 CORS 请求,除非服务器明确允许。我找不到任何关于如何在无需模拟“测试”前端的情况下测试 CORS 服务器端的资源。

应该如何测试 CORS?

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

感谢您的澄清。干杯!

以上是关于如何在 Kitura 中测试 CORS?的主要内容,如果未能解决你的问题,请参考以下文章

如何在kitura应用程序中调用mysql存储过程

如何找到 Kitura 服务器的资源文件?

Kitura iOS 服务器

如何测试CORS头

如何在 Spring Boot 中测试 CORS?当我在 MockMvcBuilders 中尝试时,尽管 Origin 错误,它总是返回 200

在 Kitura 中使用 Microsoft SQL Server