解决跨域(四)--- webSocket

webSocket

webSocket和HTTP都是应用层协议,都属于TCP协议。 webSocket连接是一次特殊的握手(即连接后不断开),与http的keep-alive不同,webSocket是真正的长连接。 webSocket是一种双向通信协议,在建立连接后,webSocket的server与client都能主动向对方发送或接收数据。
    WebSocket是一种通信协议,使用ws://(非加密)和wss://(加密)作为协议前缀。 该协议不实行同源策略,只要服务器支持,就可以通过它进行跨域通信。

下面是一个例子,浏览器发出的WebSocket请求的头信息

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
    Origin字段,表示该请求的请求源(origin),即发自哪个域名。 正因为有了Origin这个字段,所以WebSocket才没有实行同源策略。因为服务器可以根据这个字段,判断是否许可本次通信。 如果该域名在白名单内,服务器就会做出如下回应。
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
经验分享 程序员 微信小程序 职场和发展