我在企业环境中工作,发现一个我无法解决的问题。
这与EventSource将URL从HTTP更改为HTTPS有关。
const url = 'http://localhost:8080'; // <-- using HTTP not HTTPS
new window.EventSource(url);这将导致浏览器引发此错误:
GET https://localhost:8080 net::ERR_TUNNEL_CONNECTION_FAILED
我是在一个使用HTTPS的网站上开发的,所以这也许是设计出来的,它使用了相同的协议。有没有人经历过这个问题,或者知道如何解决?
--更新--
看上去是故意的。在另一个HTTPS站点上尝试此操作时,我得到了以下信息:
Mixed Content: The page at 'https://...' was loaded over HTTPS, but requested an insecure EventSource endpoint 'http://localhost...'. This request has been blocked; the content must be served over HTTPS.
问题仍然存在,我该如何解决这个问题?
发布于 2017-10-07 08:19:46
事件源不会在http和https之间更改。你是在Chrome上使用插件,还是类似的?
我想你受到了同样的政策的打击。这意味着SSE连接必须指向相同的原点,这基本上意味着相同的主机名和域、相同的方案(即http或两个https)和相同的端口。
你可以用CORS来绕过这件事。在SSE脚本的顶部,您需要发送以下标题:
Access-Control-Allow-Origin: *这表明,任何人,从任何地方,都可以连接和获取数据流。它必须在服务器脚本上完成,无法从客户端执行。(从设计上说,同一来源政策的全部目的是阻止人们未经许可使用他人的内容,并使其看起来像自己的内容。)
无耻的插件:请参阅我书中的第9章(使用HTML5 SSE、O‘’Reilly的数据推送应用程序),以获得更好的允许来源控制,以及它如何与cookies和基本auth交互。
顺便说一句,我注意到我提到Chrome不能使用自签名的https证书。老实说,我不确定这种情况是否仍然存在,但在使用https和localhost时,也可能会注意到这一点。
https://stackoverflow.com/questions/46611145
复制相似问题