2016-02-22 10 views
0

Я разрабатываю приложение, используя службу Watson Dialog, к которой API обращается к клиентскому javascript, но столкнулся с следующей проблемой при попытке получить доступ к API.Watson Services + Cross Origin Совместное использование ресурсов

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. 

Решение, как представляется, Cross Origin Resource Sharing, но я не могу найти способ, чтобы включить это для службы Уотсона. Есть ли способ сделать это? Если нет, есть ли другой способ? Мне удалось найти ресурсы для включения этого приложения для развертывания.

Если я правильно понимаю, это не будет проблемой, если наше приложение будет развернуто на BlueMix, вместо того, чтобы тестироваться локально. Однако, если это возможно, мы хотели бы иметь возможность тестировать локально, когда это возможно, для скорости разработки.

Благодарим за помощь!

+0

Возможно, эта ссылка будет полезна? ... https://developer.ibm.com/bluemix/2014/07/17/cross-origin-resource-sharing-bluemix-apis/ – Kolban

+0

@ Kolban Я несколько раз посмотрел на это, и кажется, что обсуждать только его возможность для приложений, развернутых в Watson, а не Watson Services? Единственной конфигурацией, которую я вижу для Watson Services, является тот план, который используется. –

ответ

2

API-интерфейсы, которому вы звоните, не позволяют запроса кросс происхождения и безопасности браузера мешает вам использовать его (Чтобы понять, крест происхождение поведения смотрите в документах Mozilla о CORS)

Чтобы иметь обходной путь для него (совершенно точно избегая нарушения правил безопасности вашего браузера), вы можете реализовать приложение, работающее в качестве прокси-сервера, которое будет перенаправлять запрошенные API ваши запросы и добавьте все заголовки для поддержки CORS setti NGS. Это приложение может работать на Bluemix и может быть разработано во время исполнения, которое вы хотите, nodejs или Java или php и т. Д., А затем ваше мобильное приложение должно вызывать его вместо API напрямую. Кроме того, это может позволить вам переместить много бизнес-логики от клиента к прокси-серверу, сделав первый более легкий и «проворный»

+1

Заявление о приложении/прокси - это именно тот код, о котором я упоминал в своем ответе. Проверьте это, это поможет вам запустить приложение. – Dudi

0

Если вы хотите обойти защищенную браузером безопасность во время тестирования разработки, браузеры обычно имеют механизм, позволяющий эту возможность. Например, в браузере Google Chrome запуск браузера с флагом --disable-web-security отключит проверку запросов на кросс-поиск из конца браузера, что позволяет браузеру выполнять запросы REST на любой серверный сервер. Например:

chrome --disable-web-security

Предупреждение будет показано в вашем браузере, что вы работаете в этом небезопасным больше:

enter image description here

2

Вы можете проверить на месте, принимая учетные данные службы (VCAP_SERVICES) и добавив их в ваше приложение. Это должно быть сделано на вашем веб-сервере в качестве переменных среды.

Вы можете проверить это риое: 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

Смежные вопросы