美文网首页
基于HTTP的功能追加协议

基于HTTP的功能追加协议

作者: 大唐雷恋 | 来源:发表于2019-03-16 11:17 被阅读0次

    基于HTTP的协议:

    在建立 HTTP 标准规范时,制订者主要想把 HTTP 当作传输 HTML 文档的协议。随着时代的发展,Web 的用途更具多样性,比如演化成在线购物网站、SNS(Social Networking Service,社交网络服务)、企业或组织内部的各种管理工具。

    而这些网站所追求的功能可通过 Web 应用和脚本程序实现。即使这些功能已经满足需求,在性能上却未必最优,这是因为 HTTP 协议上的限制以及自身性能有限。

    消除 HTTP 瓶颈的 SPDY:

    Google 在 2010 年发布了 SPDY(取自 SPeeDY,发音同 speedy),其开发目标旨在解决 HTTP 的性能瓶颈,缩短 Web 页面的加载时间50%)。

    SPDY - The Chromium Projects   http://www.chromium.org/spdy/

    HTTP的瓶颈

    一条连接上只可发送一个请求。

    请求只能从客户端开始。客户端不可以接收除响应以外的指令。

    请求 / 响应首部未经压缩就发送。首部信息越多延迟越大。

    发送冗长的首部。每次互相发送相同的首部造成的浪费较多。

    可任意选择数据压缩格式。非强制压缩发送。

    Ajax(Asynchronous JavaScript and XML, 异 步 JavaScript 与 XML 技术)解决方法:

    一种有效利用 JavaScript 和 DOM(Document Object Model,文档对象模型)的操作,以达到局部 Web 页面替换加载的异步通信手段。和以前的同步通信相比,由于它只更新一部分页面,响应中传输的数据量会因此而减少,这一优点显而易见。

    Comet(彗星)的解决方法:

    一旦服务器端有内容更新了,Comet 不会让请求等待,而是直接给客户端返回响应。这是一种通过延迟应答,模拟实现服务器端向客户端推送(Server Push)的功能。

    陆续出现的 Ajax 和 Comet 等提高易用性的技术,一定程度上使 HTTP得到了改善,但 HTTP 协议本身的限制也令人有些束手无策。为了进行根本性的改善,需要有一些协议层面上的改动。

    SPDY 的设计与功能:

    SPDY 没有完全改写 HTTP 协议,而是在 TCP/IP 的应用层与运输层之间通过新加会话层的形式运作。同时,考虑到安全性问题,SPDY 规定通信中使用 SSL。

    SPDY 以会话层的形式加入,控制对数据的流动,但还是采用 HTTP建立通信连接。因此,可照常使用 HTTP 的 GET 和 POST 等方 法、Cookie 以及 HTTP 报文等。

    使用 SPDY 后,HTTP 协议额外获得以下功能。

    多路复用流

    通过单一的 TCP 连接,可以无限制处理多个 HTTP 请求。所有请求的处理都在一条 TCP 连接上完成,因此 TCP 的处理效率得到提高。

    备注:这个特性没啥稀奇的,http 1.1已经有相关支持。忘了的同学翻我之前的第一节课视频~

    赋予请求优先级

    SPDY 不仅可以无限制地并发处理请求,还可以给请求逐个分配优先级顺序。这样主要是为了在发送多个请求时,解决因带宽低而导致响应变慢的问题。

    压缩 HTTP 首部

    压缩 HTTP 请求和响应的首部。这样一来,通信产生的数据包数量和发送的字节数就更少了。

    注:HTTP本身也有压缩功能,只不过压缩的是body,不是首部。忘了的翻我的第一节课~

    更详细的解释:https://www.cnblogs.com/zhaow/p/9754161.html

    推送功能

    支持服务器主动向客户端推送数据的功能。这样,服务器可直接发送数据,而不必等待客户端的请求。

    注:这个功能HTTP 1.1木有,直到HTTP2,原生HTTP才提供这个功能。

    如果用过C#,用过ASP.NET MVC的同学还会指导,做这个事儿,还有个---SignalR。首选web socket通讯方式,如果不支持,那就蜕化为长轮询。

    SignalR参考资料:

    https://www.cnblogs.com/wintersun/p/4148223.html

    https://www.cnblogs.com/Wddpct/p/5650015.html

    SPDY并没有被广泛的使用起来~

    使用浏览器进行全双工通信的WebSocket:

    WebSocket 通信协议在 2011 年 12 月 11 日,被 RFC 6455 - The WebSocket Protocol 定为标准。

    WebSocket 的设计与功能

    WebSocket,即 Web 浏览器与 Web 服务器之间全双工通信标准。其中,WebSocket 协议由 IETF 定为标准,WebSocket API 由 W3C 定为标准。仍在开发中的 WebSocket 技术主要是为了解决 Ajax 和 Comet

    里 XMLHttpRequest 附带的缺陷所引起的问题。

    WebSocket 协议:

    一旦 Web 服务器与客户端之间建立起 WebSocket 协议的通信连接,之后所有的通信都依靠这个专用协议进行。通信过程中可互相发送JSON、XML、HTML 或图片等任意格式的数据。

    一旦 Web 服务器与客户端之间建立起 WebSocket 协议的通信连接,之后所有的通信都依靠这个专用协议进行。通信过程中可互相发送JSON、XML、HTML 或图片等任意格式的数据。

    HTTP轮询与WebSocket通讯之间的对比

    WebSocket协议的主要特点

    推送功能

    支持由服务器向客户端推送数据的推送功能。这样,服务器可直接发送数据,而不必等待客户端的请求。

    减少通信量

    只要建立起 WebSocket 连接,就希望一直保持连接状态。和 HTTP 相比,不但每次连接时的总开销减少,而且由于 WebSocket 的首部信息很小,通信量也相应减少了。

    为了实现 WebSocket 通信,在 HTTP 连接建立之后,需要完成一次“握手”(Handshaking)的步骤。

    握手·请求

    为了实现 WebSocket 通信,需要用到 HTTP 的 Upgrade 首部字段,告知服务器通信协议发生改变,以达到握手的目的

    Sec-WebSocket-Key 字段内记录着握手过程中必不可少的键值。

    Sec-WebSocket-Protocol 字段内记录使用的子协议。

    忘了这个首部关键字的同学,还回去翻我的第一节课~

    WebSocket API

    JavaScript 可调用“The WebSocket API”(http://www.w3.org/TR/websockets/,由 W3C 标准制定)内提供的 WebSocket 程序接口,以实现 WebSocket 协议下全双工通信。

    以下为调用 WebSocket API,每 50ms 发送一次数据的实例。

    参考资料:

    阮一峰关于WebSocket的帖子http://www.ruanyifeng.com/blog/2017/05/websocket.html

    使用js检测浏览器是否支持WebSocket:https://blog.csdn.net/jsyxiaoba/article/details/84025295

    期盼已久的 HTTP/2.0:

    ...

    参考资料:

    《一文读懂HTTP/2 及 HTTP/3特性》

    https://mp.weixin.qq.com/s?__biz=MzA5NzkwNDk3MQ==&mid=2650589264&idx=1&sn=6ff446e3029c40eaabcff373c070e0f7&chksm=8891d874bfe6516261a18cdd029aa5e8730f0e955641ac7468f6bbae27e3b6acf8b4fb3813a3&mpshare=1&scene=2&srcid=&from=timeline&ascene=2&devicetype=android-25&version=2700033b&nettype=WIFI&abtest_cookie=BQABAAgACgALABIAEwAFAJ6GHgAklx4AWpkeAMCZHgDXmR4AAAA%3D&lang=zh_CN&pass_ticket=IlU3PwbZ3VoGOC0hdR97Rga0ryr1iA0FyCL4KUZfV7U1%2F1Y89d6hRUs7vwiuMVXi&wx_header=1

    相关文章

      网友评论

          本文标题:基于HTTP的功能追加协议

          本文链接:https://www.haomeiwen.com/subject/gmormqtx.html