ws和wss之间的区别?

mah*_*ahe 31 websocket java-websocket

将ws变成wss的程序是什么?

wss是通过普通HTTP进行升级还是wss只能用于HTTPS?

webSocket = new WebSocket("ws://localhost:port/Esv/ocp");
Run Code Online (Sandbox Code Playgroud)

当我把ws改为wss时工作正常

webSocket = new WebSocket("wss://localhost:port/Esv/ocp");
Run Code Online (Sandbox Code Playgroud)

它显示了这个错误:

连接建立错误:net :: ERR_SSL_PROTOCOL_ERROR

Al-*_*-un 48

精简版

SSL或SSL

您可能有SSL证书问题.连接点规则可以概括为:

  • wss 连接 https only
  • ws 连接 http

反之亦然:

  • https 接受 wss only
  • http 接受 ws only

错误

以下情况将导致您出错(在Firefox下完成测试):

  • 如果要将连接wss连接到http端点.在我的测试中,我有一个

    InvalidStateError:尝试使用不可用或不再可用的对象

  • 如果要将连接ws连接到https端点,则会出现错误

    SecurityError:操作不安全.

正式答案

websocket的圣经是RFC 6455.在4.1.5节:

如果/ secure /为true,则客户端必须在打开连接之后和发送握手数据之前对连接执行TLS握手[RFC2818].如果失败(例如,无法验证服务器的证书),则客户端必须使WebSocket连接失败并中止连接.否则,此通道上的所有进一步通信必须通过加密隧道[RFC5246].

安全标志由URI所定义.第3节定义了什么是安全的

如果方案组件不区分大小写匹配"wss",则称为"安全"(并且称"安全标志已设置").


TL; DR

如果你想使用wss:

  • 您必须激活SSL
  • 您的端点必须是安全的(https://...):不允许"安全降级"

如果你想使用ws:

  • 确保您的端点没有启用SSL(http://...)