首页 > 解决方案 > 为什么我们在 websocket 握手响应中使用 \n\r ?

问题描述

为什么我们在握手时使用in并\r\n在最后使用两次,而不是在 handshake 中。这是否可以在不添加的情况下握手响应?HTTP headersJS WebSocketresponse\r\n\r\nrequest\r\n

\r\n也用于TCP socket还是不只用于JS WebSocket

例如:

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

标签: httptcpwebsockethandshake

解决方案


为什么我们在 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 提供的数据流中传输。


推荐阅读