Watson服务+跨源资源共享

时间:2016-02-22 16:48:23

标签: cors ibm-cloud ibm-watson watson-dialog

我正在使用Watson的Dialog服务开发一个应用程序,其中API是在客户端javascript中访问的,但在尝试访问API时遇到了以下问题。

XMLHttpRequest cannot load https://gateway.watsonplatform.net/dialog/api. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8000' is therefore not allowed access. The response had HTTP status code 401.

解决方案似乎是跨源资源共享,但我找不到为Watson服务启用此方法的方法。有没有办法做到这一点?如果没有,还有另一种方法吗?我只能找到资源来为我们自己部署的应用程序启用它。

如果我正确理解,如果我们的应用程序部署到BlueMix,那么这不会成为问题,而不是在本地进行测试。但是,如果可能的话,我们希望能够在可能的情况下在本地进行测试以确保开发速度。

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

您可以通过获取服务凭据(VCAP_SERVICES)并将其添加到您的应用程序来进行本地测试。这应该在您的Web服务器上作为环境变量完成。

您可以查看此自述文件: https://github.com/watson-developer-cloud/movieapp-dialog

这可以在Java SDK查看时顺利运行: com.ibm.watson.developer_cloud.dialog.v1.DialogService;

或者您可以使用Node SDK 一个例子: https://github.com/watson-developer-cloud/conversational-agent-application-starter-kit/blob/master/api/services.js

答案 1 :(得分:2)

您呼叫的API不允许跨源请求,并且您的浏览器安全性阻止您使用它 (要了解关于CORS的Mozilla文档的交叉起源行为)

要有一个解决方法(完全确保避免破坏浏览器的安全策略),您可以实现一个作为代理后端的应用程序,它将向请求的API转发您的请求并将所有标头添加到支持CORS设置。 这个应用程序可以在Bluemix上运行,可以在你想要的运行时,nodejs或Java或php等上开发,然后你的移动应用程序应该直接调用它而不是API。 此外,它可以允许您将大量业务逻辑从客户端移动到代理/后端,使第一个更轻,并且#34;敏捷"

答案 2 :(得分:0)

如果希望在开发测试期间绕过面向浏览器的安全性,浏览器通常具有允许此功能的机制。例如,在Google Chrome浏览器中,使用标记--disable-web-security启动浏览器将禁止检查来自浏览器端的跨源请求,从而允许浏览器向任何后端服务器发出REST请求。例如:

chrome --disable-web-security

您的浏览器中会显示一条警告,表示您正在这个不安全的地方运行:

enter image description here