websocket创建时附加额外信息 [如自定义headers信息(利用nginx)]

文章介绍了在前端使用WebSocket连接时,如何将token安全地传递给服务端的两种方法。一种是通过nginx代理,在headers中添加token;另一种是利用WebSocket的子协议字段传递。这两种方式都能确保服务端在建立连接时能获取到token。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

情景描述:

解决方案

一、服务端要求前端创建websocket时附带的token,必须放在request的headers中(常出现在第三方的合作中);

 思路:

 整体效果:

 具体步骤:

二、服务端只需要获取到token,不介意前端在创建时怎么传的

思路:

整体效果:

具体实现:


情景描述:

前端创建websocket的时候,服务端需要在创建时能获取到token作判断,所以在前端创建websocket的时候,需要把token一起传到服务器

解决方案

一、服务端要求前端创建websocket时附带的token,必须放在request的headers中(常出现在第三方的合作中);

 思路:

前端创建websocket后,利用nginx做代理,将token加在headers中,发送给服务端

 整体效果:

前端创建websocket请求时,发送的token,在服务端的headers获取到了

 具体步骤:

         1、前端代码 ,发送websocket,将token放到url后面

 2、nginx配置,注意开启websocket的代理,$arg_XXX获取到url后的参数    

3、node代码,本例中用的是node做服务端的,ws.upgradeReq.headers获取到headers信息

 

二、服务端只需要获取到token,不介意前端在创建时怎么传的

思路:

利用websocket实例化时的第二个参数传递token。(第二个参数的用法请百度自行搜索)

整体效果:

前端创建websocket请求时,发送的token,在服务端的同样获取到了

具体实现:

1、前端代码

2、服务端代码

注意:ws.upgradeReq.headers["sec-websocket-protocol"]获取到子协议,本例是用node做服务实现的,服务端语言不同,可能获取子协议的方法不同,自行百度

 

 

WebSocket跨域资源共享(Cross-Origin Resource Sharing, CORS)是在Web浏览器的同源策略限制下,允许服务器通过HTTP头部设置特定规则,使得来自不同源(协议、域名或端口)的网页可以互相通信的技术。当使用WebSocket与非同源服务器通信,如果没有正确的CORS配置,浏览器会阻止连接。 在Nginx配置中处理WebSocket和CORS通常涉及以下几个步骤: 1. **开启WebSocket支持**: Nginx本身并不直接支持WebSocket,你需要安装第三方模块如`ngx_http_upstream_proxy_protocol_module`,并启用它。 ```nginx http { # 其他配置... proxy_protocol on; } ``` 2. **创建WebSocket专用的location块**: 使用`proxy_pass`指令,并指定WebSocket服务器地址。 ```nginx server { listen 80; # 或者443 location /ws { proxy_pass http://your-backend-server:8080; # 后端WebSocket服务地址 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; add_header 'Access-Control-Allow-Origin' '*'; # 允许所有来源 add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; } } ``` 这里的`add_header`设置了CORS允许的头信息,`*`表示允许所有来源访问。 3. **处理OPTIONS预检请求**: 对于CORS,浏览器会在实际发送WebSocket请求前先发送一个`OPTIONS`请求检查是否允许跨域,Nginx需要正确响应这个请求。 ```nginx location = /ws { add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; if ($request_method = 'OPTIONS') { add_header 'Access-Control-Max-Age' 1728000; # 设置缓存间 add_header 'Content-Length' 0; return 204; } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪落满地香

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值