许多进行前后端开发的同学,在学习过程中也总会问我一个问题:前后端到底是怎么沟通的?
这个问题,可以说是许多学习开发的同学的共同的问题,也是阻碍大多数学习开发和团队协作路上的绊脚石。
但事实上,这个问题远比你想象得简单得多。
1,前后端的交互概述
我们在日常生活中,每天都会上网。无论是我们浏览网页,还是使用QQ、微信。
细心的同学已经发现了:无论是网页,还是我们的一些客户端例如QQ、微信等等,都会通过网络和后台服务器联络并获取最新的信息。
比如说每次打开掘金社区首页,就会推送不一样的最新内容,这是网页联络了其对应的服务端获取的数据:
比如说我们每次打开网易云音乐客户端,发现推送的歌单也不一样,也会包含最新内容,这也是客户端通过网络联络到后台服务端获取的数据:
那大家就很好奇了:这些网页、客户端是怎么和服务器联络的呢?服务器这边又做了什么?
其实答案很简单:无论是网页还是客户端等等,都通过网络请求和后台服务器联络。
就像我们平时通过QQ或者短信等给远在千里的朋友发消息聊天一样,事实上,网络请求就很像我们QQ或者是短信给别人发的一条条消息。
只不过,网络请求是网页或者电脑上的一些应用软件(下面我们统称为客户端)给服务器发的“消息”,并且在网络环境和服务端正常的情况下,客户端发的“消息”,服务端收到后是一定会“回复”的。
客户端发出的消息内容,叫做请求体,服务端回复的消息内容,叫做响应体。
我们以掘金首页为例,每次从打开掘金的首页,到我们看到上面推荐的最新内容,大致可以分为以下几步:
- 加载掘金网页,网页就会先给它自己的服务器后台(掘金后台服务器)发送一个网络请求,这个请求会发送给后台那个获取所有推荐文章的网址(接口)上,以获取所有的推荐文章的列表
- 后端服务器就会从数据库中找来这些文章,并把这些文章的信息比如说每个文章的地址、标题、封面图片url等等,组装成JSON形式,放在响应体中返回给网页
- 网页获取到响应,便把信息解析并排版成好看的样子,可见这里,网页将这些文章信息给组装成了一个个小卡片
上图是在谷歌浏览器的开发者工具中查看的网络请求信息,可见很显然这个网络请求是用于获取掘金文章推荐文章的信息的,响应体中也可见服务端返回了这些文章的信息。
这就是我们平时上网的过程,是不是很简单呢?其实没有大家想象的那样复杂。
这张示意图给出了一种常见的前后端交互的例子:前端向后端发送查询信息的请求,以获取最新信息。
对于开发者来说,前端同学,开发网页的居多,在JavaScript中有发送网络请求的方法,可以发送网络请求。后端同学,开发Spring Boot居多,通常会在Spring Boot中开发相应的功能并创建接口,告诉前端同学接口地址、功能和响应数据体格式,这样前端同学就可以对后端发送请求并获得相应的数据,完成整个系统开发。
至此,相信大家明白了,咱们前后端同学到底是做什么的:
- 前端:负责开发呈现给用户看的界面
- 后端:负责开发系统的逻辑(例如说从数据库查出东西、进行处理规整、返回给前端)
相信大家现在知道了这个问题的结论:前后端交互的方式,就是通过网络请求。
可见,通过网络请求和后端进行交互,赋予了我们网页或者客户端更加动态的内容,使得网页不再单调。
2,网址 - URL
无论是我们平时上网,通常会指定浏览一个地址,比如说要求必应搜索引擎,我们就会输入网址:cn.bing.com
同样地,前端给后端发请求,也需要明确后端服务器的地址才能发送。
这个地址,我们通常称作URL。
URL是缩写,其英文全称是:Uniform Resource Locator(统一资源定位符)。
URL的格式规范规定了由哪几部分组成,以及各种符号的作用。下面来看一个网址:
可见一个完整的网址有如下内容:
- 协议:常用的是
http
和https
,了解有这两种协议即可 - 域名:指向这个网站服务器地址的一串字符串
- 路径:以
/
开头,中间每一层也是使用/
,路径就像是一层层的文件夹,不同的路径通常指向这个服务器下不同的网页或者API等等 - 参数:和路径之间以
?
分隔,?
后面就是参数了,多个参数之间使用&
分隔,每个参数是参数名=参数值
的形式,可见上述URL中只有一个参数,参数名为spm_id_from
,参数值为333.999.0.0
一些网址,以及我们平时本地开发调试的网址,可能会带端口号,因为使用了非标准端口:
但是为什么好像很少平时上网会见到有网址带端口号呢?因为大多数网站都是使用的标准端口,用http
协议访问的网址就是80端口,而https
访问的网址就是443端口的,使用80和443端口的服务端,访问它就是不需要带上端口号的。因为浏览器访问http
网址的时候就会自动访问其80端口,而https
的网址浏览器自动访问其443端口,所以我们就不需要带着端口号了!
网址是我们平时非常常见的东西了。不过大家知道网址实际上的作用吗?
其实,我们每一台接入互联网的设备,无论是计算机还是服务器,都会被分配一个IP地址。这个IP地址就像你家的详细地址门牌号一样,就像我知道了你家的地址我才能到你家来一样,需要有IP地址,我们才能够访问到指定的服务器上面去。
不过IP地址并不方便记忆,因此人们设计出来了域名,可以说就是网址,并通过域名解析服务器(DNS,Domain Name System)将域名和IP地址相映射,这样,每次我们访问一个网址,就可以找到对应服务器的IP并访问指定服务器,大家就能浏览到网页了!
所以说,一些网址我们无法访问,可能是DNS找不到这个网址所在的IP或者是受到了DNS污染:
域名对应着一个IP,你访问到了这个服务器,但是这个服务器下面有多个页面,因此使用路径来标明每个网页,就和我们平时使用电脑的文件路径一样。不过为什么大多数时候,我们访问一个域名但是没有写后面的路径部分,就能够访问到一个网站主页呢?因为只访问地址不加路径的时候,默认访问网址根路径,而大多数网站为了方便起见,把主页放在根路径下了。
3,API
API即为接口,就像一个黑盒一样,开发者可以直接访问而无需知道其内部原理。
我们访问一个API的时候,和浏览一个网页一样,也是去访问一个URL。
只不过我们访问网页的URL的时候,服务器会返回一个网页文件,浏览器把这个网页显示出来。而访问API的URL的时候,大多数时候返回的是一些文本数据而非网页。
比如说在浏览器中访问:cn.bing.com
很显然这是一个网页的URL,浏览器显示出了网页:
如果我们在浏览器中访问一个API的地址:api.iyk0.com/7rtq/?city=南京
这是网上一个免费的天气查询接口,在这个接口URL后的city
参数填上你要查询的城市即可查到该城市七日天气。
总的来说,平时访问的网站和这里访问的API,区别如下:
- 我们访问的网站的URL,会返回网页,浏览器会解析并显示网页内容
- 访问API的URL,会返回一些数据,这些数据就通常是后端从数据库查询并组织成JSON格式并返回的
API可能返回的是文本,也可能是图片、文件等等。
相信大家现在知道了,前后端交互是前端将网络请求发给后端的API,后端API返回数据,网页再将其解析为好看的样子。
无论是Spring Boot还是其它后端框架,基本上都可以轻而易举地解析出请求的URL参数、请求体的信息、请求体等,大多数情况下,基本上查询作用的API接口,都是后端根据URL中的请求的参数或者是路径去查询指定的内容,然后返回。
API通常不是给用户访问的,我们平时上网也很少去拿浏览器访问一个API,而是给前后端交互使用的。
在最开始的例子中,掘金网页(前端)向后端某个网址发了请求获取最新文章,后端就返回了最新推荐的文章信息,这个网址就是掘金后端用于获取最新文章的API。
前面也讲述了前后端交互的过程,就是前端向后端对应功能的API发送请求,后端返回数据给前端。那么开发API,也是后端开发者的工作之一。
我们大致了解API是什么即可,实际上开发的时候大家就明白了。
4,网络请求结构和类型
网络请求其实有很多,我们常用的是GET
和POST
请求。
网络请求通常有以下部分构成:
- 请求行:记录一个请求最基本的信息,例如请求的类型、请求的url和协议等等
- 请求头:主要存放请求的标识信息或者元数据之类的,例如浏览器UA、请求内容格式(是表单还是json)等等
- 请求体:存放请求的数据内容(一般是键值对),一个请求可以没有请求体
当然,后端接收到请求后返回的响应,组成结构和请求是一样的,也是三部分:
- 状态行:由HTTP协议版本号,状态码,状态消息三部分组成
- 响应头:响应的基本信息或者元数据,其中包含了响应体的格式
- 响应体:服务端返回给客户端的数据,例如访问网页时响应体就是网页,访问API时访问体就是一些JSON格式的文本数据或者是文件图片等等
这些内容大家事实上都可以在谷歌开发者工具中去查看,非常简单。
我们常见的网络请求有两种类型:GET
请求和POST
请求。
(1) GET
请求
我们平时在浏览器输入网址访问一个网站,以及使用很多查询类API都是发送了GET
请求。
就像我们上述的天气查询API一样,直接通过浏览器就是对其发送了GET
请求。
这个接口说明文档如下:
根据API,比如我要查询南京天气,我们的请求地址如下:
https://api.iyk0.com/7rtq/?city=南京
热门文章
最新文章
相关课程
更多相关内容推荐
杭州网站制作功能制作网站查询系统视频沧州网站建设制作拼多多网站哪家公司制作免费照片制作网站模板下载制作网站要学会的技术月月红制作网站口碑好的网站制作策划福田正规网站制作哪家公司好国外文凭制作网站冰火美剧网站制作苏州吴中区外贸网站制作公司翡翠网站制作视频浙江网站制作视频特朗普制作的自由搏击网站怎样模仿制作一个网站保定餐饮网站制作网站制作app有什么坏处廊坊网站制作 elu永康网站制作字体大小如何改哪个网站可以免费制作网站吗制作网站项目内容手机网站制作哪里比较好制作一个上传图片的网站广州网站制作培训课程有哪些软件制作下载网站源码制作优惠券的网站制作网站的原则和流程外贸网站制作定做律师网站制作奶茶什么制作网站比较好拼多多白底图制作网站长葛响应式网站制作2自己制作头像的网站长兴制作网站时都要注意些什么制作网站首页教学设计奥美网站制作雪糕windows制作登录网站淘宝网页怎么制作网站链接北滘外贸网站制作一呼百应网站制作蛋糕班级网站制作流程表白网站在线制作软件如何用dw编码制作网站桃花源网站制作小玩具六国论教案网站制作江门德玛力来制作网站网站制作手工花海宁珠海如何制作网站制作导购网站制作公司网站的步骤 知乎昆山网站制作公司哪家好制作特效视频开头网站如何制作网站介绍自己可以制作动图的网站网站原型图制作方法福建二手网站开发制作班级风采网站制作的结论及讨论柔术网站制作小玩具制作公司网站的公司如何制作链接qq的网站网站制作金泉网情人节贺卡制作网站聘网站制作日照品牌网站制作公司怎么讲自己制作的网站上传黄山电商网站开发制作道滘玩具网站制作有哪些道滘网站制作小象制作网站河西租房网站制作网站专题制作方案大连模板网站制作公司海盐企业网站制作在哪里手机制作软件网站吉安制作网站设计找哪家台州盐田教育网站制作怎么样ps海报制作网站网站自动化宣传单制作炫网站制作美食天津h5网站制作工具html制作电商类网站如何创建制作网站传媒制作PPT免费的网站艺术图制作网站制作虚拟仿真实验访问网站依依图片网站制作口碑好的网站制作哪家专业大庆靠谱的网站制作上海网站制作实力乐云seo网页网站怎么制作贵阳市企业网站制作什么网站可以长期制作邳州免费制作网站联邦快递网站制作雪糕义乌电影网站制作需要多少钱世界经理人网站制作丰城个人网站制作兰州制作网站如何引导客户创建网站并制作首页如何把网站小说制作txt制作类似淘宝的网站多少钱企业邮箱网站制作雪糕广州中小企业网站制作公众号封面图制作网站免费明溪企业网站制作搜索引擎网站制作头像毕郭网站制作龙泉驿租房网站制作连云港网站制作首荐开创网络制作简单网站模版京东网站建设制作流程密山h5页面制作网站在线制作影视网站logo图片三都网站制作加盟网站横幅动画制作恩施网站制作怎么收费京东网站建设制作流程双城租房网站制作sql数据库网站制作平山商城网站制作哪家好嘉祥网站设计制作动漫图片素材网站制作兰州制作网站如何引导客户龙岗网站制作书签滨海网站制作外包公司南宫家电维修网站制作安装怎么制作一个搜壁纸的网站诸城市网站制作壁纸自己怎么制作网站石家庄网站制作表格app自考网站制作冰淇淋靖江外贸营销网站制作我的世界旗帜制作网站国航网站制作贴纸乌兰察布微网站制作自己制作网站要花多少钱微片制作网站泰拳电影网站制作如何制作一个网站快捷方式东区企业网站制作手机视频制作教程网站效果快的网站制作济南制作高端网站有哪些网站首页制作书签教程木蚂蚁网站制作对联图片制作网站鄂州网站制作小玩具简笔画专业网站后台制作会计网站制作需要多少钱綦江网站制作公司咨询电话汽车网站模板制作九江营销网站制作什么是网站制作费用在线制作相册的网站如何制作自己的祝福网站奶妈网站制作奶茶谍中谍小说网站制作昌邑制作网站的基本流程烟台网站制作奶茶荆门市网站制作企业价格表新乡网站制作-中国互联超简单手机电影网站制作巩义市网站制作巴中网站建设制作维护圆形网站logo在线制作天气网站视频制作卖制作视频的网站分子进化树制作的网站或软件怎么用需要制作网站新乡英文网站制作哪家做的不错河口外贸型网站制作公司美篇制作模板网站微软网站制作贴纸图书搜索网站制作h5网站微信登录页面制作台前网站制作效果QQ网名艺术制作网站湘西教师网站制作多特网站制作起泡制作网站南京公司在线网站制作情侣自己的简历怎么制作网站制作微信有哪些网站武威如何制作自己的网站株洲废品回收网站制作城关区网站制作儿童网站制作蛋糕国外后期制作网站动画制作网站知乎网站制作人员和美工智能手机网站制作小玩具php门户网站制作教程网站制作教材书及作者句容租房网站制作网站充值接口制作北京pk赛车网站制作软件工程制作网站的实验报告沈阳php网站制作制作动态图表网站