谁正在发送http websocket升级请求



Websocket?或者XMLHttpRequest?或者我必须自己做?

所以我理解客户必须发送,但何时发送以及为什么发送?假设我使用XMLHttpRequest对象发送一个普通的HTTPGET。我无法控制浏览器中的内部tcp连接持续多久,对吧?如果我想使用websocket,我必须使用它们自己的websocket类,所以对我这个用户来说,"升级"是不可见的,是吗?只是浏览器在做一些内部魔法来重用连接,整个升级过程对我这个用户来说无关紧要?我仍然需要使用两个不同的类,我只是碰巧使用了同一个端口,然后浏览器出于性能原因决定升级。这真的正确吗?

否,WebSocket客户端发送请求WebSocket连接的HTTP请求,然后服务器使用HTTP 101交换协议进行响应,这意味着它接受连接,然后客户端可以开始以二进制格式发送和接收数据。

示例客户端请求:

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com

示例服务器响应:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat

维基百科的文章对此有很好的解释:http://en.wikipedia.org/wiki/WebSocket#WebSocket_protocol_handshake

规范中有详细说明:https://www.rfc-editor.org/rfc/rfc6455#section-1.3

只是浏览器在做一些内部魔术来重用连接,整个升级过程对我这个用户来说是无关紧要的?

没错。

我仍然需要使用两个不同的类,我只是碰巧使用然后浏览器出于性能原因决定升级这真的正确吗?

如果你想使用AJAX,你可以使用XMLHttpRequest。如果您想使用WebSocket,您可以使用WebSocket类。不同的是,WebSocket连接将与服务器协商一个全双工持久二进制通道,而XMLHttpRequest只会发出请求并得到响应。

相关内容

  • 没有找到相关文章