在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)
邮递员对OPTIONS
的{{1}}请求会返回以下标题:
该应用通过Test CORS的测试将https://adeptness.eu-gb.mybluemix.net
请求传递给GET
,并报告以下公开的响应标头:
我不完全确定CORS是否设置正确。为什么在查找#1中的https://adeptness.eu-gb.mybluemix.net
响应中没有X-Access-Token
标头?
我已经阅读了有关CORS的Mozilla文档,虽然我确实理解浏览器在飞行前请求并阻止所有CORS请求,除非服务器明确允许。我无法找到的是关于如何测试CORS服务器端的任何资源,而无需模拟测试"前端。
如何测试CORS?
答案 0 :(得分:2)
正如你所说,一般而言,CORS是告诉浏览器允许哪些Cross Origin请求,使开发人员能够打破旧的JavaScript沙箱,将有限的XHR请求限制在加载HTML页面的同一服务器上。
并非所有跨源请求都是允许的。 Kitura-CORS软件包允许服务器开发人员向浏览器提供有关允许哪种请求的信息。同样,这完全取决于发送到服务器的请求以及不关于响应的请求。
exposedHeaders参数使服务器开发人员能够控制允许发送到服务器的请求中的HTTP头。
要测试你需要有一对服务器加载一个简单的网页,其中有一个JavaScript向第二个服务器发出XHR请求。这两台服务器需要位于不同的域中(即一台本地笔记本电脑和第二台服务器在Bluemix上)。如果第二个服务器在其响应中传递了它随请求收到的标题,您将能够看到传递的内容。