第一阶段:Form
web应用想要与服务器交互,必须提交一个表单(form)。服务器接收并处理该表单,然后返回一个全新的页面。
缺点:前后两个页面需要更新的数据可能很少,这个过程可能传输了很多之前那个页面已经有的数据,浪费了带宽;为了返回整个页面,服务器可能需要为页面的其他内容构造数据,浪费服务器资源。
 
第二阶段:Ajax(Asynchronous JavaScript and XML)
由JS脚本发送http请求,服务器只返回页面需要更新的那部分数据,JS根据返回的数据刷新页面的局部内容,而不是刷新整个页面。
优点:网络传输小、服务器负担小
缺点:没有解决对实时性的友好支持(比如聊天室或客服系统),如果需要持续地从服务器获取数据,需要不断请求
 
第三阶段:Comet
一种hack技术,基于http长连接的“服务器推”的技术。实现方式有很多种,比如基于Ajax的长轮询(long-polling)、封装好的Comet4J等。
比较简单的是基于Ajax的长轮询:web应用发出Ajax请求,服务器收到请求后,如果有数据就即刻返回,如果没数据,会等待一段时间(比如定时20秒),在等待的时间内,如果有数据就返回,如果一直没数据,则timeout的时候返回。web应用收到服务器的返回后,处理数据、更新页面,再继续请求。服务器在发送完数据到接收到一个新请求之前,如果有数据需要发送,则先缓存起来,等待接到下一次请求后再发送。
优点:基本解决了实时性的问题
缺点:服务器需要阻塞线程等待数据,如果连接请求多的话,得考虑使用复杂的技术释放线程给其他请求使用,不然可能会拖死服务器。需要客户端和服务器端协调好才能正常工作。
 
第四阶段:Websocket
html5标准中的一种全双工通信规范,基于TCP协议,与http协议兼容,但不是http协议的一部分。
web应用(客户端)先发起一个Handshake请求,服务器应答之后,就可以双向交换数据了。
通信的两方都可以发起关闭的请求(通过发送一个Closing Handshake),对方收到请求后,回复一个相同的数据包,就关闭通信通道了。
优点:数据传输量极少、实时性好。
 
PS. 此外,双向通信还可以通过flash的socket和xmlsocket实现。但它不属于某一个web规范。
 
版权声明:本文为原创文章,转载请注明转自Clement-Xu的csdn博客。 https://blog.csdn.net/ClementAD/article/details/50563569

Web前后端数据交换技术和规范发展史:Form、Ajax、Comet、Websocket的更多相关文章

  1. web前后端数据交互

    前后端数据交互是每一名web程序员必须熟悉的过程,前后端的数据交互重点在于前端是如何获取后端返回的数据,毕竟后端一般情况下只需要将数据封装到一个jsonMap,然后return就完了.下面通过一个li ...

  2. thymeleaf实现前后端数据交换

    1.前端传数据后端接收: 用户在登录界面输入用户名和密码传给后端controller,由后端判断是否正确! 在html界面中要传递的数据name命名,通过表单的提交按钮会传递给响应的controlle ...

  3. Web前后端缓存技术(缓存的主要作用是什么)

    Web前后端缓存技术Web前后端缓存技术(缓存的主要作用是什么) 一.总结 一句话总结: 加快页面打开速度 减少网络带宽消耗 降低服务器压力 1.在Web应用中,应用缓存的地方有哪些? 主要有浏览器缓 ...

  4. 淘宝玉伯引发Web前后端研发模式讨论

    淘宝玉伯是是前端基础类库 Arale 的创始人,Arale 基于 SeaJS 和 jQuery.不久前,淘宝玉伯在 Github 的 Arale 讨论页面上抛出了自己对于Web 前后端研发模式的思考. ...

  5. 【springMVC】简单的前后端数据交流

    最最常见两种,一则返回视图模板(文档),二则为json数据.就使用一个源代码文件来看看springmvc是怎么做到的. 1.UserController.java源代码文件 (这里额外的使用了fast ...

  6. 两种方法实现asp.net方案的前后端数据交互(aspx文件、html+ashx+ajax)

    一个HTML页面只能显示HTML代码信息,不能与数据库进行数据的交互.asp.net方案提供了网页与数据库交互的方法,这里举出两种:①aspx文件 ②ashx文件+ajax技术 一.创建数据库 这里以 ...

  7. 如何简单区分Web前后端与MVC

    MVC是开发所有软件所必须涉及的基本几个划分 M主要负责数据与模型,V主要负责显示C主要负责交互与业务所以不管是前端还是后端,都是有MVC的.MVC是一个对于软件简单的抽象,不管是M还是V,还是C都是 ...

  8. SpringMVC参数绑定学习总结【前后端数据参数传递】

    目录 1. 绑定机制 2. 支持的数据类型 3. 参数请求中文乱码解决 4.自定义类型转换器 5.最后参数绑定学习小结 SpringMVC作为Controller层(等价servlet和struts中 ...

  9. 对GraphQL-BFF:微服务背景下的前后端数据交互方案的研究-------引用

    随着多终端.多平台.多业务形态.多技术选型等各方面的发展,前后端的数据交互,日益复杂. 同一份数据,可能以多种不同的形态和结构,在多种场景下被消费. 在理想情况下,这些复杂性可以全部由后端承担.前端只 ...

随机推荐

  1. C#:进程、线程、应用程序域(AppDomain)与上下文分析

    进程     进程是操作系统用于隔离众多正在运行的应用程序的机制.在.Net之前,每一个应用程序被加载到单独的进程中,并为该进程指定私有的虚拟内存.进程不能直接访问物理内存,操作系统通过其它的处理把这 ...

  2. SpringCloud初体验:一、Eureka 服务的注册与发现

    Eureka :云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移. Eureka 可以大致理解为 房产中介 和 房东 的关系,房东想让租客租房子,首先要把房子 ...

  3. Quick guide for converting from JAGS or BUGS to NIMBLE

    Converting to NIMBLE from JAGS, OpenBUGS or WinBUGS NIMBLE is a hierarchical modeling package that u ...

  4. 清理Visual Studio中VC++工程里不需要的文件

    Visual Studio开发C++,工程的空间几M,几十M甚至几百M的长,生成的中间文件看的眼花缭乱,占空间不说,特别是备份拷贝代码时无奈的等待,有了这个脚本,好吧,整个世界清静了. @echo o ...

  5. 黄聪:VS2010中如何让webbrowser不弹出JS异常错误窗口(c#.net)

    1.在属性窗口找到ScriptErrorsSuppressed,选择"true",这个选择的意思是,如果网页上有出现错误命令,这个错误提示将被抑制 2.[项目管理那里,在项目上右击 ...

  6. Java 经典练习题_Day010

    final 变量能被显式地初始化并且只能初始化一次.被声明为 final 的对象的引用不能指向不同的对象.但是 final 对象里的数据可以被改变.也就是说 final 对象的引用不能改变,但是里面的 ...

  7. IDEA中修改各个部位的字体大小

    1.菜单栏 Setting -> Appearance&Behavior -> Appearance ->Override default fonts by (not rec ...

  8. Java 8 字符串日期排序

    public class ObjectDto implements Serializable { private static final long serialVersionUID = 858983 ...

  9. DevExpress之XtraReport 学习

    XtraReport 一.基本概念: XtraReports 中的每个报表都由 XtraRepot 类的一个实例表示,或者由该类的子类来表示(这种情况更常见). 因此,每个报表都作为带区的容器使用,而 ...

  10. [译]2D空间中使用四叉树Quadtree进行碰撞检测优化

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Unity2017.2.0f3 原文出处 : Quick Tip: Use Quadtrees to Detect Lik ...