解决跨域(四)--- 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