暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Nginx使用websocket

我为啥没洁癖 2024-03-25
93

Websocket代理

Websocket协议基于http协议,允许http请求连接升级成Websocket协议。需要配置对应的头部以支持Websocket协议。

Websocket为了支持双向通信,必须保证数据分片的有序性,导致无法多路复用,不支持压缩。

开启websocket代理

location /ws {
	proxy_http_version 1.1;
	proxy_set_header Upgrade $http_upgrade; 
	proxy_set_header Connection "upgrade";
	...;
}
复制

特定头部

  • Sec-WebSocket-Version :客户端发送,表示它想使用的WebSocket 协议版本(13表示RFC 6455)。如果服务器不支持这个版本,必须回应自己支持的版本。
  • Sec-WebSocket-Key :客户端发送,自动生成的一个键,作为一个对服务器的“挑战”,以验证服务器支持请求的协议版本;
  • Sec-WebSocket-Accept :服务器响应,包含Sec-WebSocket-Key 的签名值,证明它支持请求的协议版本;
  • Sec-WebSocket-Protocol :用于协商应用子协议:客户端发送支持的协议列表,服务器必须只回应一个协议名;
  • Sec-WebSocket-Extensions:用于协商本次连接要使用的WebSocket 扩展:客户端发送支持的扩展,服务器通过返回相同的首部确认自己支持一或多个扩展。

协议升级

浏览器发送GET的http请求,携带websocket相关的头部,服务端根据头部升级http协议,响应101和对应的头部,长连接建立成功。后续客户端和服务端在此连接上进行通信。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论