webSocket整理(待续)-2020-08-09

1.什么是webSocket

wiki/WebSocket
webSocke是一种网络长连接协议,基于tcp的一种应用层协议。客户端与服务器连接还是使用http协议的连接,并且端口也依旧使用http的端口,ws使用的时443端口,wss则是使用80端口。虽然是两种不同的协议,但是webSocket的实现是在http实现的基础上改进的。

2. webSocket的优势,适用场景(对比HTTP)

与HTTP对比:websocket可以实现服务器主动发送信息到客户端。相对于http使用ajax轮询(间隔一定时间发送一次请求)或者long poll(没有处理完就不响应),更加高效(http每次发送请求都需要校验头部,而且是无状态连接,websocket连接之后则不需要再校验http头部,则效率更高。)

  • HTTP还是一个无状态协议。请求之间数据不共享,需要的话只能重新发送。
  • HTTP只能被动response,服务器不能主动发送请求到客户端
  • Http1.1 的 keep-alive虽然看起来像是长连接,实际上是将多个http请求合并成一个(一个http请求发送多个request和接受多个response ),request和respond请求相等,而且服务器不能主动向客户端发送请求。

在spring的websocket文档中,websocket一般用于频率高,传输数据大,需要及时响应(实时性高)的场景。

2.1 HTTP和WebSocket请求头的区别

Protocol_upgrade MDN参考

http&websocket对比.png
  • http connection状态为close:因为http也是基于TCP传输,所以也是用进行连接的。只是HTTP是无状态,并且一次请求对应一次响应,所以只要有响应,或者响应超时,一次信息http请求过程就算结束了,所以连接就直接释放了,有新的http请求就需要有重新建立连接了。
留下疑问:如果webSocket断开连接是不是也会断开connection:close,还是继续为Upgrade
  • webSocket主要是通过将request 的connection:+Upgrade并且添加(Upgrade:websocket)(升级为websocket)来区别。返回状态码为101,表示切换协议,接受转换为websocket,如果不接受,则返回例如426的状态码

If the server can't communicate using the specified version of the WebSocket protocol, it will respond with an error (such as 426 Upgrade Required)

  • Sec-WebSocket-Key通过base64生成,只是为了防止滥用,或者错误连接到不想使用webSocket的地方,好像并没有提及可以用该字段来区别哪个连接。(曾经的疑问:能通过该key 判断应该推送到哪个用户?)

    Provides information to the server which is needed in order to confirm that the client is entitled to request an upgrade to WebSocket. This header can be used when insecure (HTTP) clients wish to upgrade, in order to offer some degree of protection against abuse. The value of the key is computed using an algorithm defined in the WebSocket specification, so this does not provide security. Instead, it helps to prevent non-WebSocket clients from inadvertently, or through misuse, requesting a WebSocket connection. In essence, then, this key simply confirms that "Yes, I really mean to open a WebSocket connection."
    向服务器提供所需的信息,以确认客户端有权请求升级到WebSocket。 当不安全的(HTTP)客户端希望升级时,可以使用此标头,以提供一定程度的保护以防止滥用。 密钥的值是使用WebSocket规范中定义的算法计算的,因此不提供安全性。 相反,它有助于防止非WebSocket客户端无意间或由于滥用而请求WebSocket连接。 因此,从本质上讲,该密钥只​​是确认“是的,我的意思是打开WebSocket连接”。

  • responsed的Sec-WebSocket-Accept :则是经过服务器确认,并且加密过后的 Sec-WebSocket-Key。一般会在握手完成出现,并且只会出现一次。(所以好像并没有说该hash的作用)

    It will appear no more than once in the repsonse headers.
    它将在响应标题中出现不超过一次。

    If a Sec-WebSocket-Key header was provided, the value of this header is computed by taking the value of the key, concatenating the string "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" to it, taking the SHA-1 hash of that concatenated string, resulting in a 20-byte value. That value is then base64 encoded to obtain the value of this property.

  • webSocket与TCP协议
    webSocket连接过程打印出来如下图所示。因为webSocket基于TCP协议,所以不禁让人怀疑这是不是TCP协议的三次握手。(TCP讲起来太多了,之后再说吧。)


    image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352