请求 Kylo API 时如何修复 cross-origin 错误
How to fix cross-origin error when request to Kylo API
我在名为 kyloserver
的服务器中有一个 Kylo 沙箱的 运行 实例。我正在尝试从我的网站 运行 in localhost:8080
访问 Kylo API。
我尝试使用搜索 API 调用 url:
http://kyloserver:8400/proxy/v1/feedmgr/search?q=mary&rows=20&start=0
并像这样在 header 中使用基本身份验证 (javascript):
Authorization: 'Basic ' + btoa(this.username + ":" + this.password)
响应是:
Failed to load
http://kyloserver:8400/proxy/v1/feedmgr/search?q=mary&rows=20&start=0:
Response to preflight request doesn't pass access control check: No
'Access-Control-Allow-Origin' header is present on the requested
resource. Origin 'http://localhost:8080' is therefore not allowed
access. The response had HTTP status code 403.
如果我通过登录 UI 使用 swagger,我可以正确地获得结果。
如何才能成功访问API?
(Kylo 版本:0.8.3)
谢谢。
Kylo 默认禁用 CORS 支持。您需要编写一个插件来使用启用 CORS 的插件覆盖默认配置:
https://github.com/Teradata/kylo/blob/v0.8.4/services/service-app/src/main/java/com/thinkbiganalytics/server/DefaultWebSecurityConfigurer.java
最后我决定创建一个托管在与 Kylo 相同的服务器上的代理 Web 服务,它只是将请求从 Web 重定向到 Kylo 服务。
我在名为 kyloserver
的服务器中有一个 Kylo 沙箱的 运行 实例。我正在尝试从我的网站 运行 in localhost:8080
访问 Kylo API。
我尝试使用搜索 API 调用 url:
http://kyloserver:8400/proxy/v1/feedmgr/search?q=mary&rows=20&start=0
并像这样在 header 中使用基本身份验证 (javascript):
Authorization: 'Basic ' + btoa(this.username + ":" + this.password)
响应是:
Failed to load http://kyloserver:8400/proxy/v1/feedmgr/search?q=mary&rows=20&start=0: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access. The response had HTTP status code 403.
如果我通过登录 UI 使用 swagger,我可以正确地获得结果。
如何才能成功访问API?
(Kylo 版本:0.8.3)
谢谢。
Kylo 默认禁用 CORS 支持。您需要编写一个插件来使用启用 CORS 的插件覆盖默认配置: https://github.com/Teradata/kylo/blob/v0.8.4/services/service-app/src/main/java/com/thinkbiganalytics/server/DefaultWebSecurityConfigurer.java
最后我决定创建一个托管在与 Kylo 相同的服务器上的代理 Web 服务,它只是将请求从 Web 重定向到 Kylo 服务。