使用Socket.IO的emit()而不是所有HTTP请求是一个好习惯吗?

时间:2013-03-26 14:08:03

标签: node.js http websocket socket.io

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

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

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

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

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

问题:

  • 是否需要使用HTTPS而不是HTTP,因为我只使用HTTP将脚本发送到客户端? (注意:我打算使用本地存储而不是cookie)

  • 使用没有HTTP的纯Web套接字有什么不足吗?

  • 如果有效,为什么没有人使用它?

2 个答案:

答案 0 :(得分:1)

你的问题非常类似于这个

Why use AJAX when WebSockets is available?

在一天结束时,他们都是为不同的东西创建的,尽管你可以使用网络套接字,如果不是在普通的HTTP请求中可以完成的所有事情。

我建议使用HTTPS,因为你似乎通过websockets发送身份验证数据(也会使用SSL,不是吗?)但是这取决于你对'need'的定义。

垮台 - 缺乏对旧浏览器的支持

在许多其他情况下不会使用它,因为它没有必要,而且它仍然是“相对较新的”。

答案 1 :(得分:1)

  

是否需要使用HTTPS而不是HTTP,因为我只使用HTTP   用于向客户端发送脚本? (注意:我打算使用Local   存储而不是cookie)

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

  

使用没有HTTP的纯Web套接字是否有任何缺陷?

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

  

如果有效,为什么没有人使用它?

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

相关问题