http - 为什么我们在 websocket 握手响应中使用 \n\r ?
问题描述
为什么我们在握手时使用in并\r\n
在最后使用两次,而不是在 handshake 中。这是否可以在不添加的情况下握手响应?HTTP headers
JS WebSocket
response
\r\n\r\n
request
\r\n
是\r\n
也用于TCP socket
还是不只用于JS WebSocket
?
例如:
"Upgrade: something\r\n".
"Connection: something\r\n".
// ...
"Sec-WebSocket-Accept: something\r\n\r\n";
解决方案
为什么我们在 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 提供的数据流中传输。
推荐阅读
- python - python - pandas:输出 html 表格,其中包含跨越多行和多列的单元格
- google-maps - Google API 从位置列表中检测离用户最近的位置
- android - 错误:(8, 35) cvc-elt.1.a: 找不到元素 'android.support.constraint.ConstraintLayout' 的声明
- android - 在通知出现之前接收 WhatsApp 消息到外部应用程序
- android - 如何从我们当前的位置获取折线中的最近点
- javascript - 在 html 编辑器中允许锚标记是否安全?
- r - R linux终端执行gWidget脚本
- reactjs - 如何在 react 和 d3 中正确过渡(实时折线图)
- java - java.lang.IllegalStateException:在spring security spring boot中提交响应后无法调用sendRedirect()
- python-3.x - Python 随机选择导致 discord.py