为什么我们在websocket握手响应中使用\ n \ r?

时间:2018-11-06 05:28:30

标签: http tcp websocket handshake

为什么我们在\r\n中使用HTTP headers进行JS WebSocket握手response,却两次使用\r\n\r\n,但没有在握手{{1}中进行握手}。无需添加request就能握手响应吗?

\r\n是否也用在\r\n中?否,它仅用于TCP socket

例如:

JS WebSocket

2 个答案:

答案 0 :(得分:3)

  

为什么我们在HTTP标头中使用\ n \ r来实现JS WebSocket握手响应...

最初的Websocket握手是HTTP。因此,所使用的消息格式在HTTP规范中定义。 HTTP本身是从诸如RFC 821(邮件格式)之类的早期标准中获得这一想法的,该标准再次从较旧的东西中得到了这一点-可以说,它的发展方式与语言的发展方式相似。一个人可能做了不同的事情,但现在却是这样。

重要的是,所有人都以相同的方式使用它,并以相同的方式理解它,包括理解它既不是您所说的\n\r,也不是常用的\n,而是{{1 }}。

  

\ n \ r是否也用于TCP套接字或否,仅用于JS WebSocket?

TCP是一个八位位组流,仅在TCP级别上不同的传输字节没有特定含义的情况下。 HTTP或WebSockets之类的应用程序层协议在字节中添加了含义,从而定义了所传输数据的结构。最终,WebSocket使用TCP套接字来传输消息,即WebSocket实质上定义了结构化消息以及如何将它们串行化为字节以在TCP提供的数据流中进行传输。

答案 1 :(得分:2)

初始WebSocket握手请求是标准的HTTP升级请求。 HTTP使用CRLF(可以使用\r\n转义序列在许多语言(包括C和C ++)中表示)来终止消息标题中的每一行,并使用2个CRLF将消息标题与正文分开。格式化初始握手时,必须遵循HTTP规范。

阅读RFC 6455了解WebSocket协议规范,所有内容都包含在其中。