Watson 服务 + 跨源资源共享
Watson Services + Cross Origin Resource Sharing
我正在使用 Watson 的对话服务开发一个应用程序,其中 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 而不是在本地进行测试,这将不是问题。不过,如果可能的话,我们希望能够在可能的情况下在本地进行测试以提高开发速度。
感谢您的帮助!
如果有人希望在开发测试期间规避面向浏览器的安全性,浏览器通常具有允许此功能的机制。例如,在 Google Chrome 浏览器中,使用标志 --disable-web-security
启动浏览器将禁用检查来自浏览器端的跨源请求,从而允许浏览器向任何后台发出 REST 请求端服务器。例如:
chrome --disable-web-security
将在您的浏览器中显示一条警告,表明您 运行 在这个不安全的地方:
您可以通过获取您的服务凭证 (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
您调用的 API 不允许跨源请求,您的浏览器安全性阻止您使用它
(要了解跨源行为,请查看有关 CORS 的 Mozilla 文档)
要找到解决方法(绝对确保避免破坏浏览器的安全策略),您可以实现一个应用程序作为代理后端,它将您的请求转发到请求的 API 并添加所有 headers 以支持 CORS 设置。
此应用程序可以 运行 在 Bluemix 上,并且可以在您希望的 运行 时间开发,nodejs 或 Java 或 php 等,然后您的移动应用程序应该调用它而不是 API直接地。
此外,它可以让您将大量业务逻辑从客户端转移到 proxy/backend 使第一个更轻便 "agile"
我正在使用 Watson 的对话服务开发一个应用程序,其中 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 而不是在本地进行测试,这将不是问题。不过,如果可能的话,我们希望能够在可能的情况下在本地进行测试以提高开发速度。
感谢您的帮助!
如果有人希望在开发测试期间规避面向浏览器的安全性,浏览器通常具有允许此功能的机制。例如,在 Google Chrome 浏览器中,使用标志 --disable-web-security
启动浏览器将禁用检查来自浏览器端的跨源请求,从而允许浏览器向任何后台发出 REST 请求端服务器。例如:
chrome --disable-web-security
将在您的浏览器中显示一条警告,表明您 运行 在这个不安全的地方:
您可以通过获取您的服务凭证 (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
您调用的 API 不允许跨源请求,您的浏览器安全性阻止您使用它 (要了解跨源行为,请查看有关 CORS 的 Mozilla 文档)
要找到解决方法(绝对确保避免破坏浏览器的安全策略),您可以实现一个应用程序作为代理后端,它将您的请求转发到请求的 API 并添加所有 headers 以支持 CORS 设置。 此应用程序可以 运行 在 Bluemix 上,并且可以在您希望的 运行 时间开发,nodejs 或 Java 或 php 等,然后您的移动应用程序应该调用它而不是 API直接地。 此外,它可以让您将大量业务逻辑从客户端转移到 proxy/backend 使第一个更轻便 "agile"