Nodejs HTTP Upgrade标头

时间:2017-01-25 11:42:26

标签: node.js http https websocket upgrade

麻烦:

当我得到并升级标题时说"升级:https"我不知道接下来会做什么浏览器,这让我很困惑。

1)浏览器是否期望回答升级的protoc? 2)接下来做什么?在https的情况下它是否与https创建新连接并保持缓存在某处? 3)万一网络插座?它是否关闭第一次握手连接并建立新连接?并再次缓存有关使用什么protoc的信息? 4)我知道有很多WS库,但如果我只使用本机nodejs模块,我想知道它是如何工作的。

提前非常感谢。

1 个答案:

答案 0 :(得分:2)

很好地记录了整个来回协议方案here

  

1)浏览器是否期望回答升级哪个protoc?

是的,客户发送此信息:

GET /chat HTTP/1.1
Host: example.com:8000
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13

服务器响应:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
  

2)接下来会做什么?

当它从服务器和101响应代码获得此确认时,客户端知道服务器已将当前套接字切换到webSocket协议。这个当前打开的套接字(来自原始的http请求)成为webSocket套接字。客户端或服务器现在可以自由地将webSocket格式的数据帧发送到另一端。

  

3)万一网络套接字?它是否关闭第一次握手连接并建立新的连接?

不,初始http请求中的原始套接字变为webSocket连接。

  

并再次缓存有关使用什么protoc的信息

它只是状态的一部分,每个端都保持原始套接字。没有打开新套接字。

  

4)我知道有很多WS库,但如果我只使用本机nodejs模块,我想知道它是如何工作的。

了解它是如何工作的很好,但除非这只是一个学术兴趣或项目,否则编写自己的webSocket协议可能是开发时间的低效使用,因为它已经由其他人完成了很多时候,为了让一切正确并与规范中的一些变化互操作,它需要进行大量细节工作。

除了此处已经描述的内容之外,还有数据帧格式,加密密钥,数据包碎片,ping和pongs,子协议支持等等。