前言

最近在做的项目中用到了websocket,在谷歌浏览器中显示正常,别人在百度浏览器打开,没有数据显示,百度浏览器是ie内核,开始时先想到的是websocket的兼容性,结果证实websokcet是支持ie的。

百度浏览器的报错

WebSocket connection to 'wss://://pusher.rising.com/app/4a530ae5e37bb480c08b?protocol=7&client=js&version=2.2.
0&flash=false' fai failed: Error during WebSocket handshake: Sent non-empty 'Sec-WebSocket-Protocol' header
but no response was received
复制代码

直译过来是因为websocket握手时,发了一个不为空的头,Sec-WebSocket-Protocol,但是没有接受这个头的响应。 所以将问题焦点聚集在了Sec-WebSocket-Protocol

百度和谷歌浏览器请求投的差异

同一个请求谷歌浏览器的请求头是没有Sec-WebSocket-Protocol这个字段的,而百度浏览器是传了一个undefined。原因大致明了,因为Sec-WebSocket-Protocol传值造成的。

声明websocket的方法

var Socket = new WebSocket(url, [protocol] );
复制代码

以上代码中的第一个参数 url, 指定连接的 URL。第二个参数 protocol 是可选的,指定了可接受的子协议,是可选的。当我们给proctocol传递一个为空的变量时,谷歌浏览器会自动过滤掉值为空的请求头,儿百度浏览器会将undefind传递过去。

解决方法

很简单,穿第二个参数的时候加一层判断,如果为空,就只传一个参数就可以了。

转载于:https://juejin.im/post/5be2b51d51882516df0306ba

记录使用websocket时因为Sec-Websocket-Protocol遇到的一个问题相关推荐

  1. Nginx代理webSocket时60s自动断开, 怎么保持长连接

    利用nginx代理websocket的时候,发现客户端和服务器握手成功后,如果在60s时间内没有数据交互,连接就会自动断开,如下图: 为了保持长连接,可以采取来两种方式. 1.nginx.conf 文 ...

  2. Asp.net webApi 通过WebSocket推送消息给客户端,搭建一个即是服务端又是客户端的服务

    Asp.net webApi 通过WebSocket推送消息给客户端,搭建一个即是服务端又是客户端的服务_IT_ziliang的博客-CSDN博客 WebSocket是一种在单个TCP连接上进行全双工 ...

  3. WebSocket协议入门:WebSocket API

    HTML5连接性领域包括WebSocket.服务器发送事件和跨文档消息传递(Cross-Document Messaging)等技术.在HTML5之前,浏览器窗口和框架之间的通信由于安全的原因而受到限 ...

  4. 认识HTML5的WebSocket 认识HTML5的WebSocket

    2019独角兽企业重金招聘Python工程师标准>>> 在HTML5规范中,我最喜欢的Web技术就是正迅速变得流行的WebSocket API.WebSocket提供了一个受欢迎的技 ...

  5. websocket之二:WebSocket编程入门

    一.WebSocket客户端 websocket允许通过JavaScript建立与远程服务器的连接,从而实现客户端与服务器间双向的通信.在websocket中有两个方法: 1.send() 向远程服务 ...

  6. MySQL 当记录不存在时insert,当记录存在时update

    MySQL 当记录不存在时insert,当记录存在时更新 网上基本有三种解决方法. 第一种: 示例一:insert多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的 ...

  7. python websocket库 安装_Python WebSocket

    安装 pip install websocket-client 先来看一下,长连接调用方式: ws = websocket.WebSocketApp("ws://echo.websocket ...

  8. mysql插入实现存在更新_mysql 记录不存在时插入 记录存在则更新的实现方法

    mysql 记录不存在时插入在 MySQL 中,插入(insert)一条记录很简单,但是一些特殊应用,在插入记录前,需要检查这条记录是否已经存在,只有当记录不存在时才执行插入操作,本文介绍的就是这个问 ...

  9. mysql 主机不存在_MySQL 当记录不存在时插入,当记录存在时更新

    MySQL 当记录不存在时插入,当记录存在时更新 2012-1-30 17:58 Monday 分类:MySQL 评论(71) 浏览(21592) MySQL 当记录不存在时插入,当记录存在时更新 网 ...

  10. MySQL 当记录不存在时insert,当记录存在时update(ON DUPLICATE KEY UPDATE, REPLACE语句)...

    MySQL 当记录不存在时insert,当记录存在时更新 网上基本有三种解决方法. 第一种:示例一:insert多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语 ...

最新文章

  1. R语言ggplot2可视化:ggplot2可视化时间序列数据并在末尾数据点添加数值标签(number label)
  2. .h头文件 .lib动态链接库文件 .dll 动态链接库
  3. postgres创建用户,修改用户密码,创建数据库
  4. driver: linux2.6 内核模块导出函数实例(EXPORT_SYMBOL)
  5. android自定义组件属性,android自定义控件并添加属性的方法以及示例
  6. python编写arcgis脚本_ArcGis Python脚本——批量添加字段
  7. 苹果iOS 11.3.1正式发布,修复iPhone 8触屏bug
  8. 数据挖掘:模型选择——树模型
  9. 如何在普通 UIViewController 中使用 UITableView
  10. 微型计算机常用的分区格式,教你分出整数的硬盘分区
  11. 英语句子划分表示符号使用规则
  12. 后缀–ize_英语常用后缀-ize
  13. 【错误记录】Google Play 上架报错 ( 此版本不符合 Google Play 关于提供 64 位版本应用的要求。| 如果提供 x86 架构动态库则必须提供 x86_64 架构的动态库 )
  14. demo解析 小程序node.js_小程序基于疼讯qcloud的nodejs开发服务器部署
  15. Oracle从入门到精通(笔记)
  16. Bussiness Card Design
  17. 区块链共享数据架构设计
  18. 特征提取与检测6-SURF特征检测
  19. python实现读取文件英文词频统计并写入到文件
  20. 用Python代码画一个足球(附完整代码)

热门文章

  1. eclipse自动补全失效解决办法
  2. DOM文档加载的步骤:
  3. 时序分析:HMM模型(状态空间)
  4. C\C++编程中:相对路径+绝对路径
  5. phpMyAdmin - Error
  6. windows下看端口占用
  7. UDP穿透NAT原理解析
  8. 监视Rails进程内存泄漏的技巧
  9. 坚持做一件事情真的很不容易,首先必须要克服惰性!
  10. N-甲基-N-亚硝基脲(MNU)与眼睛健康(思考中)