HTTPS环境下使用WebSocket问题解决

这篇具有很好参考价值的文章主要介绍了HTTPS环境下使用WebSocket问题解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、问题
使用WebSocket在本地是没有问题的,能够和前端进行正常交互,但是将项目部署到服务器上,发现和前端建立不了WebSocket的连接,打开浏览器控制台报错:This request has been blocked; this endpoint must be available over WSS.

2、理解
1、首先我们要明白 wss协议实际是websocket+SSL,就是在websocket协议上加入SSL层,类似https(http+SSL)。

2、利用nginx代理wss【通讯原理及流程】

(1)、客户端发起wss连接连到nginx

(2)、nginx将wss协议的数据转换成ws协议数据并转发到Workerman的websocket协议端口

(3)、Workerman收到数据后做业务逻辑处理

(4)、Workerman给客户端发送消息时,则是相反的过程,数据经过nginx/转换成wss协议然后发给客户端

3、关于 ws 和 wss
WebSocket可以使用 ws 或 wss 来作为统一资源标志符,类似于 HTTP 或 HTTPS。其中 ,wss 表示在 TLS 之上的 WebSocket,相当于 HTTPS。默认情况下,WebSocket的 ws 协议基于Http的 80 端口;当运行在TLS之上时,wss 协议默认是基于Http的 443 端口。说白了,wss 就是 ws 基于 SSL 的安全传输,与 HTTPS 一样样的道理。所以,如果你的网站是 HTTPS 协议的,那你就不能使用 ws:// 了,浏览器会 block 掉连接,和 HTTPS 下不允许 HTTP 请求一样。

4、解决
前提,服务器已经配置好了Nginx。如果没有配置的可以去网上搜索,很多资料的。如果找不到资料的小伙伴可以看文章的最后,我会把我的nginx配置贴出来。

在前端将:ws:// 修改为:wss://即可,同时,后面不要跟IP地址加端口,要使用网站的域名,例如:

本地websocket链接:ws://192.168.0.46:8781/tf/webSocket/huozhu20220819

那么更新到服务器的时候,链接应该修改为:wss://网站域名/tf/webSocket/huozhu20220819

注意:这里直接使用域名是在Nginx做了代理,可以根据url自动匹配到对应的IP地址+端口

5、Nginx配置
server
{
listen 80;
listen 443 ssl;
server_name 域名;

ssl on;
ssl_certificate 证书.crt;
ssl_certificate_key 证书.key;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:50m;
ssl_protocols SSLv3 SSLv2 TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;

location /wss/  {   
 proxy_pass http://127.0.0.1:82/;        #通过配置端口指向部署websocker的项目
 proxy_http_version 1.1;    
 proxy_set_header Upgrade $http_upgrade;    
 proxy_set_header Connection "Upgrade";    
 proxy_set_header X-real-ip $remote_addr;
 proxy_set_header X-Forwarded-For $remote_addr;
 }

}文章来源地址https://www.toymoban.com/news/detail-805620.html

到了这里,关于HTTPS环境下使用WebSocket问题解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java后端使用websocket实现与客户端之间接收及发送消息

    客户端请求websocket接口,连接通道=》我这边业务成功客户端发消息=》客户端自动刷新。 接口:ws://localhost:8080/websocket/xx 经测试,成功 如果是线上服务器连接,则需要在nginx里配置websocket相关内容,再重启nginx,代码如下 本地连接的时候用的是ws://,因为是http链接,但是如果是

    2024年02月16日
    浏览(42)
  • websocket链接断开服务器报错java.io.EOFException解决办法

    首先说一下报错原因,由于默认60s无消息交互就会关闭长连接,所以导致这个报错 解决方案其实也很简单,既然是长时间没有通信导致断开,其实保持通信就好,可以设置心跳时间来解决。 可以前端也可以后端,附上前端代码吧 //心跳检测 var heartCheck = {     timeout: 60000,//

    2024年02月08日
    浏览(54)
  • Linux系列:开发环境搭建:ubuntu图形界面安装samba服务器、SSH使用、mount -t cifs 挂载windows共享目录方法与问题解决

    samba一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。 通常linux开发环境要和windows平台进行文件交互,使用samba进行文件夹共享,这样会给开发带来很大的便利性,samba安装很简单,下面介绍一下在ubunt

    2024年02月21日
    浏览(68)
  • 【Nginx笔记02】通过Nginx服务器转发客户端的WebSocket接口到后端服务

    这篇文章,主要介绍如何通过Nginx服务器转发客户端的WebSocket接口到后端服务【知识星球】。 目录 一、Nginx配置WebSocket 1.1、Nginx配置内容 1.2、客户端请求地址 1.3、创建WebSocket测试工程 1.4、启动测试 1.5、WebSocket超时问题 1.5.1、设置超时时间 1.5.2、建立心跳机制(推荐) 今天

    2024年04月11日
    浏览(46)
  • Java跨域问题的几种后端解决方式

    跨域指的是:浏览器不能执行其他网站的脚本,从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。跨域是由浏览器的同源策略造成的,是浏览器施加的安全限制。a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,所

    2024年02月08日
    浏览(40)
  • Java后端WebSocket的实现

    WebSocket 1.什么是WebSocket? webSocket是HTML5开始提供的一种在单个TCP连接上进行全双工通讯的协议。 webSocket使得客户端和服务器之间的数据交换变得更加简单, (在线聊天基础)允许服务端主动向客户端推送数据(服务器可以主动发消息给客户端) 。在webSocket API中,浏览器和服务器

    2024年02月06日
    浏览(42)
  • 解决:Java后端返回给前端的Date格式数据相差8小时的问题

    问题描述: 后端得到的数据是对的,但是返回给前端后,数据比原数据慢了8小时。 原因: json数据在返回浏览器端是会被spring-boot默认的Jackson框架转换,而Jackson框架默认的时区GMT(相对于中国是少了8小时)。 解决: 在application.yml文件中,配置

    2024年04月16日
    浏览(58)
  • java后端用mockito做单元测试,一直报错空指针问题【已解决】

    写java后端,用mockito做单元测试 跑测试代码的时候,一直报空指针错: 测试代码如下: debug发现 ruleService 和 mockRuleMapper 为空: 一开始以为是测试代码哪写错了,作为一个后端小白,在网上搜索相关bug解决办法,乃至询问身边写过测试的人,前前后后弄了好几个小时,还是一

    2024年02月12日
    浏览(51)
  • 解决Java后端开发过程中,后端是BigDecimal类型,返回前段后两位小数是0的话自动去掉的问题

    在Java 后端开发过程中,有的码友们会遇到,当某个价格字段是BigDecimal类型时,值的小数点后面两位0的时候,比喻89.00,返回给前端展示的时候,变成了89,后面的两个小数就不见了。这种情况可以使用自定义序列化方式解决。 第一步,自定义序列化类 在需要序列化的字段上

    2024年02月15日
    浏览(60)
  • JAVA:SpringBoot中使用websocket出现404问题

    问题: 在Springboot中使用websocket时,本地开发环境可以正常运行,但部署到服务器环境出现404问题。 解决方案: 分析后发现,服务器环境与本地环境的主要区别是服务器上使用了nginx代理中转,需要进行以下配置,否则会报404错误。 server     {         listen       80;      

    2024年02月04日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包