ws和wss之间的区别?

时间:2017-10-04 05:17:33

标签: websocket java-websocket

将ws更改为wss的步骤是什么?

wss是否通过普通HTTP进行升级或wss仅适用于HTTPS?

webSocket = new WebSocket("ws://localhost:port/Esv/ocp");

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

webSocket = new WebSocket("wss://localhost:port/Esv/ocp");

它显示此错误:

  

连接建立错误:net :: ERR_SSL_PROTOCOL_ERROR

1 个答案:

答案 0 :(得分:33)

短版

SSL或非SSL

您可能拥有SSL certificate issue。连接点规则可以是summarized as

  • 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://...