为什么我们在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";
字符串
2条答案
按热度按时间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提供的数据流中传输。
nom7f22z2#
初始WebSocket握手请求是一个标准的HTTP升级请求。HTTP使用CRLF(在许多语言中可以使用
\r\n
转义序列表示,包括C和C++)来终止消息头中的每一行,并使用2个CRLF将消息头与消息体分开。格式化初始握手时必须遵循HTTP规范。阅读RFC 6455了解WebSocket协议规范,它涵盖了所有内容。