4

我设置了一个 Node.js HTTP 服务器。它侦听路径“/”并在获取请求时返回一个空的 HTML 模板。

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

那么客户端和服务器之间的所有通信都是由 Web Sockets 提供的。

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

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

问题:

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

  • 在没有 HTTP 的情况下使用纯 Web 套接字有什么缺点吗?

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

4

2 回答 2

2

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

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

在没有 HTTP 的情况下使用纯 Web 套接字有什么缺点吗?

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

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

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

于 2013-03-26T19:18:01.090 回答
1

你的问题和这个很相似

为什么在 WebSockets 可用时使用 AJAX?

归根结底,它们都是为不同的事物而创建的,尽管您可以在大多数情况下使用 Web 套接字,即使不是在正常 HTTP 请求中可以完成的所有事情。

我建议使用 HTTPS,因为您似乎确实通过 websockets 发送身份验证数据(它也将使用 SSL,不是吗?)但这取决于您对“需要”的定义。

失败 - 缺乏对旧浏览器的支持

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

于 2013-03-26T17:00:19.067 回答