Междоменный AJAX (Philips Hue Lights)

Я создаю веб-приложение, которое использует распознавание голоса и преобразование текста в речь, которое выполняет действия/отображает широкий спектр данных через HTML-страницу (построенную с помощью JS (jQuery для AJAX)/HTML/CSS.) Это веб-приложение находится в стадии разработки. размещен на HTTPS-сервере, который не находится в моей локальной сети.

Я настроил и настроил несколько интеллектуальных источников света под названием «Philips HUE Lights», оснащенных RESTful API, которыми можно управлять только через локальную сеть (не видны за пределами локальной сети).

Я могу отправлять команды на устройство, посетив инструмент отладчика/API CLIP (локальный IP-адрес) «http:////debug/clip.html», который включен в их продукт. Я могу отправлять HTTP-команды на «мост Philip HUE», который является устройством, которое выдает команды на свет. Все команды работают, когда я использую их инструмент API (GET, «PUT, POST, DELETE»), посещая локальный URL-адрес, показанный выше.

Однако, когда я пытаюсь использовать запрос jQuery AJAX "GET"/"PUT" из моего веб-приложения, размещенного на моем HTTPS-сервере, команда не выполняется. Я попытался установить свойство заголовка функции AJAX с помощью «Access-Control-Allow-Origin: *». Я также попытался установить для свойства crossDomain значение true в функции AJAX. Я также попытался установить для свойства «dataType» значения «json» и «jsonp», но это все равно не сработает.

Я посещаю свое веб-приложение HTTPS через компьютер, подключенный к локальной сети, к которой подключен «HUE Bridge». Учитывая, что я использую компьютер в той же сети, я подумал, что это может сработать...

Я прочитал много других сообщений/информации в Интернете, но не могу найти окончательного ответа. Я хотел спросить некоторых из вас, более опытных людей:

Возможно ли то, что я пытаюсь выполнить, учитывая описанный выше сценарий? Или мне придется добиться этого другим способом?

Любая помощь/предложения очень ценятся. Спасибо.


person Eric    schedule 16.06.2016    source источник
comment
Где вы установили заголовок Access-Control-Allow-Origin: *? Установите его на стороне вашего API, и он должен работать. Во-вторых, вы не можете запускать запросы AJAX в локальном файле, он должен быть на локальном хосте (или на любом хосте).   -  person skobaljic    schedule 17.06.2016
comment
Удаленный сервер должен разрешать доступ из разных источников.   -  person CBroe    schedule 17.06.2016
comment
Это вполне возможно, поскольку и веб-сайт Hue, и веб-каналы IFTTT могут влиять на свет Hue из общедоступного Интернета.   -  person Ron Reuter    schedule 17.06.2016
comment
какое сообщение об ошибке?   -  person Legends    schedule 17.06.2016


Ответы (1)


Вы столкнулись с проблемами безопасности «Смешанного содержимого».

В основном, когда вы размещаете страницу на защищенном URL-адресе (https), вы не можете получить доступ к незащищенным (http) ресурсам, не получая ошибку смешанного содержимого. Эта ошибка видна в консоли вашего браузера (обычно доступ осуществляется по F12), когда что-то не работает во время веб-разработки, всегда проверяйте консоль на наличие ошибок.

Чтобы обойти это, вы можете временно отключить безопасность и разрешить небезопасный запрос. Например, Chrome показывает щит в адресной строке, на который можно нажать, чтобы временно отключить предупреждение. Firefox показывает интерактивное предупреждение на значке замка в адресной строке.

Это может быть временным обходным решением для разработчиков, но вы не можете ожидать, что ваши пользователи отключат систему безопасности.

Решение должно заключаться в отправке заголовка Content-Security-Policy. Согласно документации с http://content-security-policy.com/, следующий заголовок должен разрешать XMLHttpRequests. на любой ресурс:

Content-Security-Policy: connect-src *

Однако, поскольку у меня недостаточно контроля для изменения заголовков на веб-сервере, на котором размещены мои файлы, я не смог это проверить.

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

person Michel    schedule 22.06.2016