报文、前后端分离、express中间件、TCP协议

1.报文

报文,是网络中交换和传输的数据单元,即站点一次性要发送的数据块。报文包含了将要发送的完整的数据信息,其长短很不一致,长度不限且可变。报文也是网络传输的单位,传输过程中会不断的封装成分组、包、帧来传输,封装的方式就是添加一些信息段,那些就是报文头以一定格式组织起来的数据。

HTTP报文是由一行一行简单的字符串组成的。HTTP报文都是纯文本,不是二进制代码,所以人们可以很方便地对其进行读写。如果说HTTP是因特网的信使,那么HTTP报文就是它用来搬东西的包裹了。

报文由三部分组成:对报文进行描述的起始行,包含属性的首部块,以及可选的、包含数据的主题部分。

http报文是简单的格式化文本。所有的HTTP报文都可以分为两类:请求报文和响应报文

2.前后端分离

未分离时期:

半分离时期:

前后端半分离,前端负责开发页面,通过接口(Ajax)获取数据,采用dom操作对页面进行数据绑定,最终是由前端把页面渲染出来。这也就是其他博客里说的,Ajax与SPA应用(单页应用)结合的方式。其结构图如下

分离时期:

前后端分离:

前端:整个页面显示以及页面的交互逻辑。用ajax和node作为交互。其中node作为中间层。

后端:提供api接口,利用redis保存session,与数据库交互。

流程:

客户端(浏览器)向node请求页面交互。

node向后端(这里用java)转发请求。java在发送请求到数据库。

java返回结果给node。node返回页面,提供数据。

前后端分离前端:

前端可以不依赖后端,前端自己起一个服务,如果前端页面处理好,后端的API还没有提供,那么,前端可以用mock模拟数据。

这里出现一个问题,如果没有服务,单页面是不可以ajax请求数据,会出现跨域的问题。要么浏览器做跨域。所以这里用到node。

我们利用node的express开启一个本地服务器

node:

node主要是为了分层开发,前端不需要知道后端是怎么提供数据,怎么操作。后端也不需要知道node是怎么操作,前端是怎么部署。前端可以利用node自己作处理。

node本身有着异步,非阻塞I/o。在处理并发量比较大的数据请求上有很大的优势。

增加node.js作为中间层,具体有哪些好处呢

适配性提升

响应速度提升

性能得到提升

  1. Express的中间件

Express是一种路由和中间件Web框架,它具有自己的最小功能:Express应用程序本质上是一系列中间件函数调用。

中间件函数是可以访问请求对象 (req),响应对象(res)以及应用程序的请求 - 响应周期中的下一个中间件函数的函数。下一个中间件函数通常由名为的变量表示next。

中间件功能可以执行以下任务:

执行任何代码。

更改请求和响应对象。

结束请求 - 响应周期。

调用堆栈中的下一个中间件函数。

如果当前的中间件函数没有结束请求 - 响应周期,则必须调用next()以将控制传递给下一个中间件函数。否则,请求将被挂起。

  1. 说说TCP传输的三次握手四次挥手策略

为了准确无误的把数据送达目标处,TCP协议采用了三次握手策略。用TCP协议把数据包送出去后,TCP不会对传输后的情况置之不理,它一定会向对方确认是否送达,握手过程中使用了TCP的标志:SYN和ACK.

发送方首先发送一个带SYN标志的数据包给对方。接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。

最后,发送端再回传一个带有ACK标志的数据包,以示握手结束。

若在握手过程中,某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包。

单开一个TCP连接则需要“四次挥手”。

第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动主动方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会在给你发送数据了(当然,在FIN包之前发送出去的数据,如果没有收到对应的ACK确认报文,主动关闭方依然会重发这些数据。)

第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。

第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据。

第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。

原文地址:https://www.cnblogs.com/kelley-w/p/10265076.html

时间: 2024-08-29 18:21:54

报文、前后端分离、express中间件、TCP协议的相关文章

中间件,前后端分离思想

中间件 什么是中间件呢? 个人理解中间就相当于一个过滤器,在客户端和应用程序间用来处理req和res的方法 浏览器向服务器发送一个请求后,服务器直接通过request.定位属性的方式得到通过request携带过去的数据,这中间就一定有一个函数将这些数据分类做了处理,已经处理好了,最后让request对象调用使用,这个函数可以说就是中间件 Espress中的中间件: 中间件的结构: app.use.([path],function) path : 是路由的url,默认参数是"/",意义是

前后端分离————VUE+node(express)

前后端分离----VUE+node(express) vue作为前端的框架,node(express)作为后端的框架.无数据库,使用端口保存数据. VUE: 使用vue-cli构建vue项目(vueapp). npm install -g vue-cli(安装,安装过的就不用了) vue init webpack vueapp axios:(与ajax相似) import axios from 'axios' var url="http://localhost:3000" //expr

前后端分离后的前端时代

本文从前端开发的视角,聊一聊前后端分离之后的前端开发的那些事儿.阅读全文,大约需要8分钟. 什么是前后端分离 除了前端之外都属于后端了. 你负责貌美如花,我负责赚钱养家 在传统的像ASP,JSP和PHP等开发模式中,前端是处在一个混沌的状态中,可以说是没有独立的"人格"可言. 前端负责切图和编写静态页面模板,后端将数据渲染到前端提供的页面模板中,最后将页面渲染到浏览器展示. 这个过程中,前端只提供页面模板或者写一些JavaScript脚本,有的甚至JS脚本都是后端来写,前端的作用只局限

利用grunt-contrib-connect和grunt-connect-proxy搭建前后端分离的开发环境

前后端分离这个词一点都不新鲜,完全的前后端分离在岗位协作方面,前端不写任何后台,后台不写任何页面,双方通过接口传递数据完成软件的各个功能实现.此种情况下,前后端的项目都独立开发和独立部署,在开发期间有2个问题不可避免:第一是前端调用后台接口时的跨域问题(因为前后端分开部署):第二是前端脱离后台服务后无法独立运行.本文总结最近一个项目的工作经验,介绍利用grunt-contrib-connect和grunt-connect-proxy搭建前后端分离的开发环境的实践过程,希望能对你有所帮助. 注:

前后端分离实践一

在开始讨论这个话题之前我们先来认识一下传统的开发模式. 一.传统开发模式 相信很多做过Web开发童鞋应该都会经历这样一种开发模式,利用后端语言提供的模版引擎编写HTML/XML页面,比如: PHP 开发有 Smarty模板引擎 Java web工程有jsp页面 Python 各个Web框架都有各自的模板引擎 NodeJS 的express你懂得 都有一个共同的特点,服务器端后台语言生成解析后的HTML/XML格式返回给客户端,例如浏览器端访问直接返回解析好的HTML,浏览器直接就解释执行. 二.

nodeJS(express4.x)+vue(vue-cli)构建前后端分离详细教程

好想再回到大学宿舍,当时床虽小,房随小,但是心确是满的 ----致  西安工程大学a-114舍友们 转载请注明出处:水车:http://www.cnblogs.com/xuange306/p/6185453.html 没图片的教程都是耍流氓 准备工作: 安装nodejs ---还用我教了? 安装依赖包express4.x  点这里>>>nodeJS搭建本地服务器 安装vue-cli脚手架 点这里>>>vue-cli构建vue项目 这里强调一下,express是后端服务器

也谈基于NodeJS的全栈式开发(基于NodeJS的前后端分离)

随着不同终端(Pad/Mobile/PC)的兴起,对开发人员的要求越来越高,纯浏览器端的响应式已经不能满足用户体验的高要求,我们往往需要针对不同的终端开发定制的版本.为了提升开发效率,前后端分离的需求越来越被重视,后端负责业务/数据接口,前端负责展现/交互逻辑,同一份数据接口,我们可以定制开发多个版本. 这个话题最近被讨论得比较多,阿里有些BU也在进行一些尝试.讨论了很久之后,我们团队决定探索一套基于NodeJS的前后端分离方案,过程中有一些不断变化的认识以及思考,记录在这里,也希望看到的同学参

基于NodeJS进行前后端分离

1.什么是前后端分离 传统的SPA模式:所有用到的展现数据都是后端通过异步接口(AJAX/JSONP)的方式提供的,前端只管展现. 从某种意义上来说,SPA确实做到了前后端分离,但这种方式存在两个问题: WEB服务中,SPA类占的比例很少.很多场景下还有同步/同步+异步混合的模式,SPA不能作为一种通用的解决方案. 现阶段的SPA开发模式,接口通常是按照展现逻辑来提供的,而且为了提高效率我们也需要后端帮我们处理一些展现逻辑,这就意味着后端还是涉足了view层的工作,不是真正的前后端分离. 现阶段

基于 koajs 的前后端分离实践

一.什么是前后端分离? 前后端分离的概念和优势在这里不再赘述,有兴趣的同学可以看各个前辈们一系列总结和讨论: 系列文章:前后端分离的思考与实践(1-6) slider: 淘宝前后端分离实践 知乎提问: 如何评价淘宝 UED 的 Midway Framework 前后端分离? Web 前后端分离的意义大吗? 尤其是<前后端分离的思考与实践>系列文章非常全面的阐述了前后端分离的意义和技术实现.如果不想看上面的文章,可以在脑海里留下这样一个轮廓就好: 本文主要阐述趣店团队基于Koajs的前后端分离实