Web Socket 协议握手与交换协议

Posted

技术标签:

【中文标题】Web Socket 协议握手与交换协议【英文标题】:Web Socket Protocol Handshake vs. Switching Protocols 【发布时间】:2014-03-14 16:39:09 【问题描述】:

这两种响应状态有什么区别:

HTTP/1.1 101 Web Socket Protocol Handshake

HTTP/1.1 101 Switching Protocols

我得到哪一个重要吗?

【问题讨论】:

【参考方案1】:

没有任何区别。重要的是 101 响应代码表明握手正在进行中。这是在RFC 6455 中定义的:

来自客户端的引导行遵循 Request-Line 格式。 来自服务器的引导线遵循状态行格式。 Request-Line 和 Status-Line 产生式在 [RFC2616] 中定义。

...

来自服务器的握手比客户端握手简单得多。 第一行是 HTTP 状态行,状态码为 101:

HTTP/1.1 101 切换协议

101 以外的任何状态码都表示 WebSocket 握手尚未完成,HTTP 的语义仍然适用。

Status-Line 的文本是任意的,服务器可以使用它想要的任何文本,每个 RFC 2616:

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

...

Status-Code 元素是尝试理解和满足请求的 3 位整数结果代码。这些代码在第 10 节中完全定义。原因短语旨在给出状态代码的简短文本描述。状态代码供自动机使用,原因短语供人类用户使用。客户不需要检查或显示原因短语。

Switching Protocols 恰好是 RFC 6455 中的示例使用的,但这不是必需的。

【讨论】:

以上是关于Web Socket 协议握手与交换协议的主要内容,如果未能解决你的问题,请参考以下文章

HTTPS协议的SSL握手过程

网络编程 TCP协议:三次握手,四次回收,反馈机制 socket套接字通信 粘包问题与解决方法

简述Socket,IP,TCP三次握手,HTTP协议(有助于理解记忆和学习)

TCP/IP网络编程三次握手协议及socket编程

SSL协议

socket和http协议