跨域 AJAX(飞利浦 Hue Lights)
Cross Domain AJAX (Philips Hue Lights)
我正在构建一个网络应用程序,它使用语音识别和文本转语音,通过 HTML 页面(使用 JS 构建(jQuery 对于 AJAX)/HTML/CSS.) 此 Web 应用程序托管在不在我的本地网络上的 HTTPS 服务器上。
我已经设置并配置了一些名为 "Philips HUE Lights" 的智能灯,它们配备了 RESTful API,只能通过本地网络控制(在外部不可见)本地网络。)
我可以通过访问他们产品中包含的 CLIP debugger/API 工具(本地 ip)"http:////debug/clip.html" 向设备发送命令。我能够将 HTTP 命令发送到 "Philip HUE Bridge",这是向灯发出命令的设备。当我使用他们的 API 工具(GET、“PUT、POST、DELETE)访问上面显示的本地托管的 url 时,所有命令都有效。
但是,当我尝试使用托管在我的 HTTPS 服务器上的 Web 应用程序中的 jQuery AJAX 请求 "GET"/"PUT" 时,命令失败。我尝试将 AJAX 函数头 属性 设置为 "Access-Control-Allow-Origin: *"。我还尝试在 AJAX 函数中将 "crossDomain" 属性 设置为 true。我也试过将 "dataType" 属性 设置为 "json" 和 "jsonp" 但它仍然不起作用。
我正在通过连接到 "HUE Bridge" 所连接的本地网络的计算机访问我的 HTTPS Web 应用程序。鉴于我在同一网络上使用一台计算机,我认为这可能有效...
我在互联网上阅读了很多其他 posts/information 但似乎无法找到明确的答案。我想问问你们中一些更有经验的人:
考虑到我上面描述的场景,我正在尝试完成的事情是否有可能实现?或者我必须以不同的方式实现这一目标吗?
任何 help/suggestions 非常感谢。谢谢
您 运行 陷入 "Mixed Content" 安全问题。
基本上,当您在安全 URL (https) 上托管页面时,您无法在不出现混合内容错误的情况下访问不安全 (http) 资源。
此错误在您的浏览器控制台中可见(通常通过 F12 访问),如果在 Web 开发过程中出现问题,请始终检查控制台是否有错误。
要破解此问题,您可以暂时禁用安全性并允许不安全的请求。例如 Chrome 在地址栏中显示一个盾牌,您可以单击它来暂时禁用警告。 Firefox 在地址栏的锁定图标上显示一个可点击的警告叠加层。
这可能是开发的临时解决方法,但您不能期望您的用户禁用安全性。
一个解决方案应该是发送一个 Content-Security-Policy header。根据 http://content-security-policy.com/ 的文档,以下 header 应该允许 XMLHttpRequests 到 any 资源:
Content-Security-Policy: connect-src *
但是,由于我没有足够的控制权来修改托管我的文件的网络服务器上的 headers,因此我无法对此进行测试。
在使用此方法之前,请确保您了解发送此 header.
时的安全隐患
我正在构建一个网络应用程序,它使用语音识别和文本转语音,通过 HTML 页面(使用 JS 构建(jQuery 对于 AJAX)/HTML/CSS.) 此 Web 应用程序托管在不在我的本地网络上的 HTTPS 服务器上。
我已经设置并配置了一些名为 "Philips HUE Lights" 的智能灯,它们配备了 RESTful API,只能通过本地网络控制(在外部不可见)本地网络。)
我可以通过访问他们产品中包含的 CLIP debugger/API 工具(本地 ip)"http:////debug/clip.html" 向设备发送命令。我能够将 HTTP 命令发送到 "Philip HUE Bridge",这是向灯发出命令的设备。当我使用他们的 API 工具(GET、“PUT、POST、DELETE)访问上面显示的本地托管的 url 时,所有命令都有效。
但是,当我尝试使用托管在我的 HTTPS 服务器上的 Web 应用程序中的 jQuery AJAX 请求 "GET"/"PUT" 时,命令失败。我尝试将 AJAX 函数头 属性 设置为 "Access-Control-Allow-Origin: *"。我还尝试在 AJAX 函数中将 "crossDomain" 属性 设置为 true。我也试过将 "dataType" 属性 设置为 "json" 和 "jsonp" 但它仍然不起作用。
我正在通过连接到 "HUE Bridge" 所连接的本地网络的计算机访问我的 HTTPS Web 应用程序。鉴于我在同一网络上使用一台计算机,我认为这可能有效...
我在互联网上阅读了很多其他 posts/information 但似乎无法找到明确的答案。我想问问你们中一些更有经验的人:
考虑到我上面描述的场景,我正在尝试完成的事情是否有可能实现?或者我必须以不同的方式实现这一目标吗?
任何 help/suggestions 非常感谢。谢谢
您 运行 陷入 "Mixed Content" 安全问题。
基本上,当您在安全 URL (https) 上托管页面时,您无法在不出现混合内容错误的情况下访问不安全 (http) 资源。 此错误在您的浏览器控制台中可见(通常通过 F12 访问),如果在 Web 开发过程中出现问题,请始终检查控制台是否有错误。
要破解此问题,您可以暂时禁用安全性并允许不安全的请求。例如 Chrome 在地址栏中显示一个盾牌,您可以单击它来暂时禁用警告。 Firefox 在地址栏的锁定图标上显示一个可点击的警告叠加层。
这可能是开发的临时解决方法,但您不能期望您的用户禁用安全性。
一个解决方案应该是发送一个 Content-Security-Policy header。根据 http://content-security-policy.com/ 的文档,以下 header 应该允许 XMLHttpRequests 到 any 资源:
Content-Security-Policy: connect-src *
但是,由于我没有足够的控制权来修改托管我的文件的网络服务器上的 headers,因此我无法对此进行测试。
在使用此方法之前,请确保您了解发送此 header.
时的安全隐患