首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EventSource修改协议

EventSource修改协议
EN

Stack Overflow用户
提问于 2017-10-06 17:36:05
回答 1查看 351关注 0票数 1

我在企业环境中工作,发现一个我无法解决的问题。

这与EventSource将URL从HTTP更改为HTTPS有关。

代码语言:javascript
复制
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.

问题仍然存在,我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-07 08:19:46

事件源不会在http和https之间更改。你是在Chrome上使用插件,还是类似的?

我想你受到了同样的政策的打击。这意味着SSE连接必须指向相同的原点,这基本上意味着相同的主机名和域、相同的方案(即http或两个https)和相同的端口。

你可以用CORS来绕过这件事。在SSE脚本的顶部,您需要发送以下标题:

代码语言:javascript
复制
Access-Control-Allow-Origin: *

这表明,任何人,从任何地方,都可以连接和获取数据流。它必须在服务器脚本上完成,无法从客户端执行。(从设计上说,同一来源政策的全部目的是阻止人们未经许可使用他人的内容,并使其看起来像自己的内容。)

无耻的插件:请参阅我书中的第9章(使用HTML5 SSE、O‘’Reilly的数据推送应用程序),以获得更好的允许来源控制,以及它如何与cookies和基本auth交互。

顺便说一句,我注意到我提到Chrome不能使用自签名的https证书。老实说,我不确定这种情况是否仍然存在,但在使用https和localhost时,也可能会注意到这一点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46611145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档