第一阶段: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. EXCEL中如何删除透视表的多余汇总

    EXCEL中如何删除透视表的多余汇总 1)如下图,选中字段列,单击鼠标右键,在弹出的菜单中选择[字段设置]选项. 2)弹出[字段设置]对话框. 3)选择“分类汇总和筛选”选项卡,然后勾选“无”选项,单 ...

  2. nginx禁止非sever_name指定域名访问

    禁止非sever_name指定域名访问,将其访问指向默认站点: 设置非server_name指定域名访问,将该访问重写到test.1comserver { listen 80 default; rew ...

  3. CentOS 6.0 VNC远程桌面配置方法(转帖)

    问题:新装开发机,安装VNC软件后,按照下面文档配置后,无法用VNC view连接,关闭防火墙后可以连上 解决方法:说明问题出在防火墙配置上,除了允许15900端口外,还有其他要设,经过排查后,加上如 ...

  4. XiaoMi Interview Log

    面试题目 PHP 弱类型 实现? COW 写时复制 实现? COW的时候内存的变化 12 $a = $b = 1;$b = 2; 的内存变化 ? 提供一个rand()函数[函数输出0 - 正无穷] 想 ...

  5. php变量的实现

    1.php变量的实现 变量名 zval ,变量值 zend_value,php7的变量内存管理的引用计数 在zend_value结构上,变量的操作也都是zend_value实现的. //zend_ty ...

  6. Bootstrap-CL:列表组

    ylbtech-Bootstrap-CL:列表组 1.返回顶部 1. Bootstrap 列表组 本章我们将讲解列表组.列表组件用于以列表形式呈现复杂的和自定义的内容.创建一个基本的列表组的步骤如下: ...

  7. Chrome经常新标签页打开http://destyy.com/qNHR3u

    经常新标签页打开http://destyy.com/qNHR3u网址. 在历史记录里查询 chrome://history/?q=destyy.com ,发现最早访问是25日10点34分05.貌似那个 ...

  8. [win10]遇坑指南

    好多不好用的地方,现在解决的差不多了,把经验分享一下,也方便自己下一次重装 win10 时不再进坑. 1. 输入法:https://zhidao.baidu.com/question/45942172 ...

  9. Map和Bean的相互转换

    Map和Bean的相互转换 BeanUtils位于org.apache.commons.beanutils.BeanUtils下面,其方法populate的作用解释如下: 完整方法: BeanUtil ...

  10. Centos命令行窗口显示一大串前缀,777;notify;Command completed;的解决方法

    How to remove the return code from the terminal prompt In addition to the PS1 environment variable, ...