我能否在非80端口使用WebSocket?这会破坏使用现有的Web/HTTP基础设施的整个目的吗?并且我认为这不再适合在非80端口使用WebSocket的名称。
如果我在其他端口上使用WebSocket,为什么不直接使用TCP呢?或者说WebSocket协议本身具有特殊的优势吗?
由于当前WebSocket握手是以HTTP UPGRADE请求的形式进行的,这是否意味着我必须在该端口上启用HTTP协议才能完成WebSocket握手?
我能否在非80端口使用WebSocket?这会破坏使用现有的Web/HTTP基础设施的整个目的吗?并且我认为这不再适合在非80端口使用WebSocket的名称。
如果我在其他端口上使用WebSocket,为什么不直接使用TCP呢?或者说WebSocket协议本身具有特殊的优势吗?
由于当前WebSocket握手是以HTTP UPGRADE请求的形式进行的,这是否意味着我必须在该端口上启用HTTP协议才能完成WebSocket握手?
最初定义的webSocket协议是用于从浏览器到服务器上的。浏览器没有通用的TCP访问,因此如果想要一个持久的套接字而没有自定义的浏览器附加组件,则提供了webSocket。与普通的TCP连接相比,webSocket协议提供了利用HTTP身份验证和cookie的能力,一种标准的应用程序级别和端对端保持活动ping/pong的方式(TCP提供跳跃级别保持活动,但不提供端对端),内置的帧协议(您必须设计自己的数据包格式在TCP中)和许多支持这些高级特性的库。基本上,webSocket在比TCP更高的级别上工作(在封面下使用TCP),并提供大多数人发现有用的更多内置功能。例如,如果使用TCP,则必须首先获取或设计协议(一种表达数据的方式),而webSocket已经内置。
既然当前的WebSocket握手是以HTTP UPGRADE请求的形式进行的,那么是不是必须在端口上启用HTTP协议才能完成WebSocket握手?
您必须在希望在其上使用webSocket的端口上运行HTTP服务器,因为所有webSocket请求都始于HTTP请求。它不必是功能强大的HTTP服务器,但它必须处理初始的HTTP请求。
如今很少有理由使用80端口(HTTP)除了将其重定向到443端口(HTTPS)之外,因为通过服务(例如LetsEncrypt)进行证书设置已经变得简单且免费。
唯一可能违反此规则的情况是本地开发和非面向互联网的服务。
我猜测这就是你提出问题的意图。对此,我认为这样做会增加不必要的复杂性,并且并没有明显的好处。它不会增加安全性,也不会使任何事情变得更加容易。
但这确实意味着需要针对主机和连接到您的websocket服务器制定特定的防火墙例外。这意味着从企业/学校/受限环境访问您的服务的人可能无法使用它,除非他们能够以某种方式说服管理层它是强制性的。我怀疑在这种方式下排除用户群体的好理由不多。
但是,也没有什么阻止您这样做...
我认为可以。 80
是默认端口,但您可以将其更改为任何您喜欢的端口。
origin
头来防止跨域访问。 - kelunik