如何使用 Philips Hue Hub 绕过 CORS
How to get around CORS with Philips Hue Hub
我有新发布的 Philips Hue 桥接器,我试图通过向它发送 JSON 请求从我的浏览器控制它。我正在使用第三方 'helper' api 只是为了让事情变得更容易一些 - 但哪个是无关紧要的,因为在它下面只是发送一个常规的 PUT 请求。我只是在本地(在本地网络服务器上)使用 Chrome 到 运行 JS。
PUT http://192.168.1.86/api/2e51aa2362f1a416d8eab4816b669eb/lights/16/state
{ on: true }
问题是我收到以下 CORS 错误:
XMLHttpRequest cannot load http://192.168.1.86/api. No
'Access-Control-Allow-Origin' header is present on the requested
resource. Origin 'http://example.com' is therefore not
allowed access.
这非常有道理 - 我明白在做什么 - 毕竟我正试图向远程服务器发出 PUT 请求,结果我的浏览器禁止我这样做。但是我显然不能更改集线器上的代码。
有什么解决办法吗?不久前我看到飞利浦需要在他们自己的网站上做 something similar 以允许跨域访问。
我能找到的相关信息很少 - 我不确定飞利浦最近是否有所改变。事实上,第三方 JS APIS 甚至没有提到这一点,这让我相信飞利浦可能已经改变了一些东西(我发现 third party webapp 有同样的问题)。
编辑:
这些是headers回来的:
HTTP/1.1 200 OK
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Expires: Mon, 1 Aug 2011 09:00:00 GMT
Connection: close
Access-Control-Max-Age: 3600
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE, HEAD
Access-Control-Allow-Headers: Content-Type
Content-type: text/html
Content-Length: 0
飞利浦 hue 桥发送 "Access-Control-Allow-Origin:*" header 所以它应该可以正常工作。据我所知,它总是这样做。
我刚刚检查了一份 "clip.html" 文件(在网桥上找到),我将其放置在不同的网络服务器上并且工作正常。
您确定您使用的是正确的 IP 地址吗(例如,对网桥的 GET 是否有效?)
事实证明 Fiddler(Windows HTTP 调试代理)以某种方式与我的 CORS 请求发生冲突 - 这没有任何意义,但现在我只是关闭了 Fiddler,它工作正常并能够发出 PUT 请求。
我启用了 'Stream',但这并没有什么不同。
我有新发布的 Philips Hue 桥接器,我试图通过向它发送 JSON 请求从我的浏览器控制它。我正在使用第三方 'helper' api 只是为了让事情变得更容易一些 - 但哪个是无关紧要的,因为在它下面只是发送一个常规的 PUT 请求。我只是在本地(在本地网络服务器上)使用 Chrome 到 运行 JS。
PUT http://192.168.1.86/api/2e51aa2362f1a416d8eab4816b669eb/lights/16/state
{ on: true }
问题是我收到以下 CORS 错误:
XMLHttpRequest cannot load http://192.168.1.86/api. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://example.com' is therefore not allowed access.
这非常有道理 - 我明白在做什么 - 毕竟我正试图向远程服务器发出 PUT 请求,结果我的浏览器禁止我这样做。但是我显然不能更改集线器上的代码。
有什么解决办法吗?不久前我看到飞利浦需要在他们自己的网站上做 something similar 以允许跨域访问。
我能找到的相关信息很少 - 我不确定飞利浦最近是否有所改变。事实上,第三方 JS APIS 甚至没有提到这一点,这让我相信飞利浦可能已经改变了一些东西(我发现 third party webapp 有同样的问题)。
编辑:
这些是headers回来的:
HTTP/1.1 200 OK
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Expires: Mon, 1 Aug 2011 09:00:00 GMT
Connection: close
Access-Control-Max-Age: 3600
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE, HEAD
Access-Control-Allow-Headers: Content-Type
Content-type: text/html
Content-Length: 0
飞利浦 hue 桥发送 "Access-Control-Allow-Origin:*" header 所以它应该可以正常工作。据我所知,它总是这样做。
我刚刚检查了一份 "clip.html" 文件(在网桥上找到),我将其放置在不同的网络服务器上并且工作正常。
您确定您使用的是正确的 IP 地址吗(例如,对网桥的 GET 是否有效?)
事实证明 Fiddler(Windows HTTP 调试代理)以某种方式与我的 CORS 请求发生冲突 - 这没有任何意义,但现在我只是关闭了 Fiddler,它工作正常并能够发出 PUT 请求。
我启用了 'Stream',但这并没有什么不同。