51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2142|回复: 0
打印 上一主题 下一主题

[资料] HTTP和WebSocket之间难舍难分的关系

[复制链接]
  • TA的每日心情
    擦汗
    5 小时前
  • 签到天数: 1046 天

    连续签到: 4 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2017-10-11 14:19:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    这段时间在工作当中首次涉及到了websocket协议,颇为感兴趣,因此希望给大家分享一下,其与原始的http协议的区别以及websocket的优点。
      首先HTMl5指的是一系列新的API,或者说新规范,新技术。WebSocket是HTML5中新协议、新API。Http协议本身只有1.0和1.1,也就是所谓的Keep-alive,把多个Http请求合并为一个。
      那么为什么说http协议并不是一个持久连接的协议呢?
      (1)Http的生命周期通过Request来界定,也就是Request一个Response,那么在Http1.0协议中,这次Http请求就结束了。在Http1.1中进行了改进,是的有一个Keep-alive,也就是说,在一个Http连接中,可以发送多个Request,接收多个Response。但是必须记住,在Http中一个Request只能对应有一个Response,而且这个Response是被动的,不能主动发起。
      (2)WebSocket是基于Http协议的,或者说借用了Http协议来完成一部分握手,在握手阶段与Http是相同的。
      客户端:
      GET http://121.40.165.18:8088/ HTTP/1.1
      Host:121.40.165.18:8088
      Connection: Upgrade
      Upgrade: websocket
      Origin: http://www.blue-zero.com
      Sec-WebSocket-Version:13
      Sec-WebSocket-Key:4IDp1OUMMlQXNFifKUjovA==
      服务端:
      HTTP/1.1 101 SwitchingProtocols
      Upgrade: websocket
      Connection: Upgrade
      Sec-WebSocket-Accept:bRpTHaDDnJNwuZUNb0ZAcBYRU9A=
      这样,我们就可以直接使用websocket协议与服务器进行消息传输了。熟悉http协议的同学会发现它与传统的http请求不太一样,head中多了几个字段:
          Upgrade:websocket
          Connection:Upgrade
          Sec-WebSocket-Version:13
          Sec-WebSocket-Key:4IDp1OUMMlQXNFifKUjovA==
      前三条均是告诉服务器,我这里需要使用的websocket协议,希望将协议变化。而Sec-WebSocket-Key表示的是一个验证码,用来确定服务器提供的是websocket协议。
      服务器收到request后返回的response中也包含了几条特有字段:
          HTTP/1.1101 Switching Protocols
          Upgrade:websocket
          Connection:Upgrade
          Sec-WebSocket-Accept:bRpTHaDDnJNwuZUNb0ZAcBYRU9A=
      返回101证明协议已经改变,变为了websocket,最后附加的Sec-WebSocket-Accept是服务器经过确认并且加密过后的Sec-WebSocket-Key,用来表示自己的真实性。
      HTTP通信:

      Websocket通信:

      由上图可知,websocket只要建立连接,之后客户端与服务器的通讯完全是自由的,客户端可以主动发送消息,同理服务端也可以主动进行消息推送。而http请求只能一个request对应一个response,所以服务端不能做到真正意义上的主动发送消息。而且连接建立起后只需要通过数据帧来进行传输,帧的头部信息远比http当中的head小多了,会节省大量的带宽。更适合做长时间的数据传输。但其缺点就是需要一直维持连接,因此对于服务器的端口资源消耗较大。
      小编在此先简单介绍一下HTTP与WebSocket协议的区别,WebSocket的数据帧介绍以及服务器的搭建方法会在接下来的文章中进行分享。

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-14 14:09 , Processed in 0.058757 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表