node.js – 使用Socket.IO的emit()代替所有HTTP请求是一个好习惯吗?

我建立了一个Node.js HTTP服务器.它侦听路径’/’并在get请求中返回一个空的
HTML模板.

此模板包含Require.js客户端脚本,该脚本创建与服务器的Socket.IO连接.

然后,客户端和服务器之间的所有通信都由Web套接字提供.

在连接时,服务器需要验证;如果有认证cookie,则客户端将它们发送到服务器进行验证,如果没有cookie则客户端呈现登录视图并等待用户输入等.

到目前为止一切正常,在验证凭据后,我为用户创建了一个SID,并使用它来管理他的访问权限.然后我渲染主视图和应用程序启动.

问题:

>是否需要使用HTTPS而不是HTTP,因为我只使用HTTP将脚本发送到客户端? (注意:我打算使用本地存储而不是cookie)
>使用没有HTTP的纯Web套接字是否有任何缺陷?
>如果它有效,为什么没有人使用它?

最佳答案

Is there a need to use HTTPS instead of HTTP since I’m only using HTTP
for sending script to the client? (Note: I’m planning to use Local
Storage instead of cookies)

不,对于websockets的握手,需要HTTP / HTTPS.从安全的角度来看,HTTP或HTTPS的选择.如果你想用它来简单地发送脚本那么就没有坏处.如果要在页面中实现用户登录/身份验证,则应使用HTTPS.

Are the any downfalls in using pure Web Sockets without HTTP?

Web套接字和HTTP是非常不同的.如果您使用纯Web套接字,您将错过HTTP. HTTP是跨平台Web服务的首选.它有利于文档遍历/检索,但它是一种方式. Web套接字通过单个TCP连接提供全双工通信通道,并允许我们摆脱Ajax,Reverse Ajax,Comet等的变通方法和黑客攻击.需要注意的是,两者都可以共存.因此,在不遗漏HTTP的情况下瞄准Web套接字.

If it works, why nobody’s using that?

我们生活在HTTP时代,网络套接字相对较新.从长远来看,Web套接字将获得普及并占据更大的Web服务份额.直到最近,许多浏览器都不能正确支持Web套接字.请参阅here,IE 10是IE中支持Web套接字的最新且唯一的版本. nginx,一个广受欢迎的服务器直到2013年2月至3月才支持网络套接字.网络套接字需要时间才能成为主流,但它会成为主流.

点赞