为什么在WebSocket握手响应中使用\n\r?

qyzbxkaa  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(138)

为什么我们在JS WebSocket握手response的HTTP头中使用\r\n,并在最后使用两次\r\n\r\n,而不是在握手request中?是否可以在不添加\r\n的情况下进行握手响应?
\r\n也用于TCP套接字还是仅用于JS WebSocket?
举例来说:

"Upgrade: something\r\n".
"Connection: something\r\n".
// ...
"Sec-WebSocket-Accept: something\r\n\r\n";

字符串

qaxu7uf2

qaxu7uf21#

为什么我们在JS WebSocket握手响应的HTTP头中使用\n\r.
最初的WebSocket握手是HTTP。因此所使用的消息格式是在HTTP规范中定义的。HTTP本身从早期的标准(如RFC 821(邮件格式))中获得了这个想法-让我们只说它以类似于语言演变的方式演变。人们可能会以不同的方式做到这一点,但现在它是这样的。
重要的是,所有人都以同样的方式使用它,并以同样的方式理解它,这包括理解它既不是你所说的\n\r,也不是常用的\n,而是\r\n
\n\r是否也用于TCP套接字,是否仅用于JS WebSocket?
TCP是一个八位字节流,其中不同的传输字节在TCP级别没有特定的含义。应用层协议,如HTTP或WebSockets,为字节添加了含义,从而定义了传输数据的结构。最终,WebSockets使用TCP套接字来传输消息,即WebSockets本质上定义了结构化消息以及它们如何被序列化为字节,以便在TCP提供的数据流中传输。

nom7f22z

nom7f22z2#

初始WebSocket握手请求是一个标准的HTTP升级请求。HTTP使用CRLF(在许多语言中可以使用\r\n转义序列表示,包括C和C++)来终止消息头中的每一行,并使用2个CRLF将消息头与消息体分开。格式化初始握手时必须遵循HTTP规范。
阅读RFC 6455了解WebSocket协议规范,它涵盖了所有内容。

相关问题