- 前后端通信概念:前端和后端数据交互的过程 或 浏览器与服务器之间数据交互的过程
- 如访问页面,属于后端向前端发送数据
- 用户输入网址
- 通过解析的IP,,去找到对应的服务器要html等代码
- 服务端返回html代码,浏览器解析并展示页面
-
- 用户注册/登录,属于前端向后端发送数据
- 前端收集用户的信息,如手机号,密码登
- 发送给后台
- 后端收到数据后,判断用户名、密码是否正确,并将结果返回给前端
- 前端根据结果进行下一步操作,如跳转等
-
- 搜索功能,也属于前端向后端发送
- 前端将用户输入的关键字发送给后端
- 后端根据关键字搜索,将搜索结果返回给前端
- 前端将结果渲染到页面
-
- 页面上的图片,文字等都是从后端返回的,如bilibili,每个人的推荐视频都不同,后台需要用推荐算法确定数据
- 前后端通信的过程(前后端通信是在 请求—响应 中完成的)
后端:服务器端
客户端:只要能与服务器通信的都是客户端
前端:浏览器端,属于客户端的一种
- 请求——响应的流程
用户输入网址,浏览器解析完域名后会向该域名指向的Web服务器发出请求
如果不需要查询数据库,Web服务器将直接返回用户的请求
有时需要向数据库查询一些数据,然后把处理结果返回给用户(如首页的广告)
所有的资源都加载完成后,这个页面就可以提供完整的外观和功能了
前端的通信方式有以下几种:
- HTML的标签,在浏览器解析html标签的时候,遇到一些特殊的标签,会想服务器发送请求,包括link/img/script/iframe,chrome浏览器允许同一个域名下最多同时请求6个资源(可以把图片放在不同的域名下,加快加载速度)
- 一些标签不会主动向浏览器发送请求,但是用户可以使用它们发送请求,如a/form,需要手动触发
- 还可以使用Ajax和Fetch
- http协议:超文本传输协议,是一个请求——响应协议
- http请求——响应的过程:
- http报文
浏览器向服务器发送请求时,请求本身就是信息,叫做请求报文
服务器向浏览器发送响应时传播的信息,叫做响应报文
如GET请求,没有请求体,数据通过请求头携带
POST请求,有请求体,数据通过请求体携带
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<h1>get</h1>
<form action="https://www.baidu.com" method="get">
<input type="text" name="username" placeholder="用户名" />
<input type="password" name="password" placeholder="密码" />
<input type="submit" value="注册" />
</form>
<h1>post</h1>
<form action="https://www.baidu.com" method="post">
<input type="text" name="username" placeholder="用户名" />
<input type="password" name="password" placeholder="密码" />
<input type="submit" value="注册" />
</form>
</body>
</html>
- 常见的http方法
RESTful API:代表状态转移的表现层,这是一种基于HTTP协议,用于定义与Web服务交互的接口设计风格
RESTful API遵循一系列的设计原则和约定,以下是HTTP定义的几个主要的请求方法:
- GET:用于获取目标资源
- POST:用于创建新的资源
- PUT:用于更新现有的资源,需要提供完整的资源体
- PATCH:也用于更新现有的资源,但只需要提供要更改的资源
- DELETE:用于删除目标资源
GET和POST的区别:
- 语义不同:GET用于获取数据,POST用于创建数据
- 发送数据方面:GET通过地址在请求头中携带数据,可携带的数据较少;POST可以通过请求头和请求体携带数据,可以携带的数据理论上是无限的,因此如果是大量数据可以使用POST请求
- 缓存:GET可以被缓存,POST不会被缓存
- 安全性:严格来说,GET和POST都不安全,不建议发送密码等敏感信息,保证安全需要走HTTPS协议
- http状态码(定义服务器对请求的处理结果,是服务器返回的数据)
「200 OK」是最常见的成功状态码,表示一切正常
「204 No Content」也是常见的成功状态码,与 200 OK 基本相同,但响应头没有 body 数据
「206 Partial Content」是应用于 HTTP 分块下载或断点续传,表示响应返回的 body 数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态
「301 Moved Permanently」表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问
「302 Found」表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问
「304 Not Modified」不具有跳转的含义,表示资源未修改,重定向已存在的缓冲文件,也称缓存重定向,用于缓存控制
「400 Bad Request」表示客户端请求的报文有错误,但只是个笼统的错误
「403 Forbidden」表示服务器禁止访问资源,并不是客户端的请求出错
「404 Not Found」表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端
「500 Internal Server Error」与 400 类型,是个笼统通用的错误码,服务器发生了什么错误,我们并不知道
「501 Not Implemented」表示客户端请求的功能还不支持,类似“即将开业,敬请期待”的意思
「502 Bad Gateway」通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误
「503 Service Unavailable」表示服务器当前很忙,暂时无法响应服务器,类似“网络服务正忙,请稍后重试”的意思
- 服务端:(又称后端,server端)
前端ajax要调用某个接口,这个接口就是服务端提供的(如GET请求从接口获取数据,POST请求向接口提交数据)
- 提供前端要展示的数据
- 接受前端要提交的数据
- 存储数据,把数据存储到数据库中
- 前后端交互
相关名词:
url
: 后端接口的地址, 即前端 Ajax 请求时的地址
method
: 请求方法, 如GET
POST
PUT
DELETE
等
状态码
: 接口返回的状态, 如200
302
404
500
等
Request
:请求
Request Body
:请求是发送给后端的数据
Request Content-type
: 发送数据的格式, 如json
Response
:返回/响应
Response Body
: 后端返回给前端的数据
Response Content-type
: 返回数据的格式, 如 json
- GET请求图示:
- POST请求图示:
- 返回格式
返回的信息中一般包含三种比较重要的信息:1.errno:0(即errno number)2.data{} 3.message:"相关的说明"
Tips:状态码 status 和错误码 errno 是不一样的,status200表示响应成功,errno 0表示成功获取到数据
- 一个前端页面可以对应不同的服务端
- 服务端如何处理并返回数据
- 定义前端请求的 url 和相应的 method(前端ajax时需要url和方法)
- 用 Request 获取数据,用 Response 返回数据
- 读取和存储数据
- 路由(router,服务器端的入口规则,需要前端和后端进行约定)
路由包含:
- 定义 method ,如 GET/POST 等
- 定义 url 规则,如 / api / list 和 / api / create 等
- 定义输入(Request body)和输出(Response body)格式
路由是规则,url 是路由的一部分,通过method 和 url 可以确定一个路由
- 请求和响应
通过 Request 可以获取 :method、url、body(请求体)
通过 Response 可以获取:状态码、Content-type(返回数据类型)、body(响应体)
- 服务端处理数据
完整的流程:
1.前端发送请求
2.服务端获取 method 和 url ,确定使用哪个路由
3.路由里面,执行相关的逻辑,如果需要操作数据库,路由会去操作数据库
4.逻辑执行完毕,服务端会把相应的数据返回给前端