当前位置: 首页 > 知识库问答 >
问题:

我应该在80以外的端口上使用WebSocket吗?

夹谷阳夏
2023-03-14

我应该在非80端口上使用WebSocket吗?它是否破坏了使用现有web/HTTP基础设施的全部目的?我认为它不再适合非80端口的WebSocket名称。

如果我在其他端口上使用WebSocket,为什么不直接使用TCP呢?或者WebSocket协议本身有什么特殊的好处吗?

由于当前WebSocket握手是HTTP UPGRADE请求的形式,这是否意味着我必须在端口上启用HTTP协议才能完成WebSocket握手?

共有3个答案

韶弘壮
2023-03-14

在我看来,是的,你可以80是默认端口,但您可以随意更改为任何端口。

琴琪
2023-03-14

如今,除了重定向到端口443(HTTPS)之外,几乎没有理由使用端口80(HTTP),因为认证(通过LetsEncrypt等服务)的设置既简单又免费。

此规则唯一可能的例外是本地开发和面向非互联网的服务。

我怀疑这就是你问题的意图。为此,我认为这样做会增加不必要的复杂性,但没有明显的好处。它不会增加安全性,也不会让任何事情变得更容易。

但这确实意味着需要对主机和连接到您的网络套接字服务器进行特定的防火墙例外。这意味着,从公司/学校/封闭环境中访问您的服务的人可能无法使用它,除非他们能够以某种方式说服管理层这是强制性的。我怀疑有很多好的理由以这种方式排除你的用户群。

但也没有什么能阻止你这样做...

赵俊远
2023-03-14

我应该在非80端口上使用WebSocket吗?它是否破坏了使用现有web/HTTP基础设施的全部目的?我认为它不再适合非80端口的WebSocket名称。

您可以在主机操作系统允许的任何端口上运行webSocket服务器,并且允许您的客户端连接到该端口。

然而,在端口80(或443)上运行它有许多优点。

>

  • 网络基础设施通常已经部署并在端口80上打开,用于从客户端所在的地方(如台式计算机、移动设备等)到服务器所在的地方的出站连接(如数据中心)。因此,在端口80上部署webSocket应用程序通常不需要防火墙或路由器配置等中的新漏洞。可能需要更改配置才能在不同的端口上运行。例如,许多大型公司网络对可以在哪些端口上建立出站连接非常挑剔,并且只针对特定的标准和预期行为进行配置。某些公司网络可能不允许为webSocket连接选择非标准端口。这是使用端口80的重要原因(具有锁定配置的专用网络的最大互操作性)。

    许多从浏览器运行的webSocket应用程序希望利用现有的安全/登录/验证基础设施,这些基础设施已经在主机网页的80端口上使用。如果所有东西都在同一个端口上,那么使用完全相同的基础设施来检查webSocket连接的身份验证可能会更简单。

    webSocket 的某些服务器基础结构(例如 node.js 中的 socket.io)使用组合的服务器基础结构(单个进程,一个侦听器)来支持 HTTP 请求和 webSocket。如果两者位于同一端口上,则更简单。

    如果我在其他端口上使用WebSocket,为什么不直接使用TCP呢?或者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请求。

  •  类似资料:
    • 问题内容: 我有一个托管在lighttpd上的网站,可以在“ www”子域中访问。我还有一个聊天服务器,侦听由node.js和socket.io制成的8124端口。 我希望所有客户端流量都通过将所有请求重定向到“聊天”子域到端口8124来在端口80上发生。因此我启用了mod_proxy,并在lighttpd.conf中添加了: 在客户端上,当我连接到网络套接字时, 我从node.js得到正确的消息

    • 我不能运行Nginx,因为端口80已经在监听docker代理服务。 我想在端口8800而不是默认端口80上运行Nginx。 因此,我编辑了默认文件,如下所示; 但是,即使在重新启动后,我仍然无法使其按预期工作。 我做错了什么,如何解决? 下面是我得到的错误; ● nginx。服务-高性能web服务器和反向代理服务器已加载:已加载(/lib/systemd/system/nginx.service;

    • 问题内容: 我正在安装了Node.js的Amazon EC2上运行Debian的实例。如果我运行下面的代码: 我得到下面的输出,它告诉我还有另一个进程正在监听端口80: 现在,当我检查是否有一个进程在端口80上侦听某个进程(以root身份出现,以防任何东西被隐藏)时: 我得到以下输出,它告诉我在端口80上没有监听: 我应该注意,如果这有所作为,那么debian会将80端口作为入站规则打开。 我的问

    • Spring靴:1.4.0.M1 我有一个IIS在端口80上运行,但是我已经通过STS配置属性将Sever.port更改为8090。STS屏幕快照 为什么STS embedded tomcat在更改后仍使用端口80?有点迷惑。

    • 问题内容: 我有一个通过端口5000运行的Flask服务器,很好。我可以在http://example.com:5000上访问它 但是是否可以在http://example.com上简单地访问它?我假设这意味着我必须将端口从5000更改为80。但是当我在Flask上尝试使用该端口时,运行该错误消息。 连续lsof -i :80收益 我需要先杀死这些进程吗?这样安全吗?还是有另一种方法可以让Flas

    • 问题内容: 我有使用XMLHttpRequest(实际上是jQuery)的网站。我还在同一服务器上运行了另一个站点,该站点提供一个脚本文件,该脚本文件使XHR请求返回到该站点,即。 http:// mysite:50000 / index.html 包括 并且 http:// mysite:9000 / otherscript.js 包括 问题是- 这不起作用。来自已加载脚本的AJAX请求只是失败