websocket

WebSocket是HTML5新增的协议,它的目的是在浏览器和服务器之间建立一个不受限的双向通信的通道

一个标准的websocket请求格式:

GET ws://localhost:3000/ws/chat HTTP/1.1
Host: localhost
Upgrade: websocket
Connection: Upgrade
Origin: http://localhost:3000
Sec-WebSocket-Key: client-random-string
Sec-WebSocket-Version: 13

和普通的http请求有所不同:
  1. GET请求的地址不是类似/path/,而是以ws://开头的地址;
  2. 请求头Upgrade: websocketConnection: Upgrade表示这个连接将要被转换为WebSocket连接;
  3. Sec-WebSocket-Key是用于标识这个连接,并非用于加密数据;
  4. Sec-WebSocket-Version指定了WebSocket的协议版本。
服务器接受请求后的响应:
HTTP/1.1 101 Switching Protocols                  //101表示本次HTTP协议即将更改,更改后的协议就是Upgrade: websocket指定的WebSocket协议。
Upgrade: websocket                            
Connection: Upgrade
Sec-WebSocket-Accept: server-random-string


WebSocket协议本身不要求同源策略(Same-origin Policy),也就是某个地址为http://a.com的网页可以通过WebSocket连接到ws://b.com
但是,浏览器会发送Origin的HTTP头给服务器,服务器可以根据Origin拒绝这个WebSocket请求。所以,是否要求同源要看服务器端如何检查。
posted @ 2019-11-13 21:49  淡薄幽清  阅读(37)  评论(0)    收藏  举报