0

我正在使用 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,而不是在本地进行测试,这将不是问题。但是,如果可能的话,我们希望能够在可能的情况下在本地进行测试,以提高开发速度。

谢谢你的帮助!

4

3 回答 3

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

于 2016-02-24T12:15:15.120 回答
2

您正在调用的 API 不允许跨源请求,并且您的浏览器安全性阻止您使用它(要了解跨源行为,请查看 Mozilla docs about CORS)

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

于 2016-02-24T17:35:32.107 回答
0

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

chrome --disable-web-security

您的浏览器中将显示一条警告,表明您正在运行此不安全的更多:

在此处输入图像描述

于 2016-02-22T17:07:21.817 回答