前后端交互相关概念

发布时间 2023-12-19 22:13:26作者: 波波波维奇~
  • 前后端通信概念:前端和后端数据交互的过程 或 浏览器与服务器之间数据交互的过程
    • 如访问页面,属于后端向前端发送数据
    1. 用户输入网址
    2. 通过解析的IP,,去找到对应的服务器要html等代码
    3. 服务端返回html代码,浏览器解析并展示页面
    • 用户注册/登录,属于前端向后端发送数据
    1. 前端收集用户的信息,如手机号,密码登
    2. 发送给后台
    3. 后端收到数据后,判断用户名、密码是否正确,并将结果返回给前端
    4. 前端根据结果进行下一步操作,如跳转等
    • 搜索功能,也属于前端向后端发送
    1. 前端将用户输入的关键字发送给后端
    2. 后端根据关键字搜索,将搜索结果返回给前端
    3. 前端将结果渲染到页面
    • 页面上的图片,文字等都是从后端返回的,如bilibili,每个人的推荐视频都不同,后台需要用推荐算法确定数据

  

  • 前后端通信的过程(前后端通信是在 请求—响应 中完成的)

  

  后端:服务器端

  客户端:只要能与服务器通信的都是客户端

  前端:浏览器端,属于客户端的一种

 

  • 请求——响应的流程

  用户输入网址,浏览器解析完域名后会向该域名指向的Web服务器发出请求

  如果不需要查询数据库,Web服务器将直接返回用户的请求

  有时需要向数据库查询一些数据,然后把处理结果返回给用户(如首页的广告)

  所有的资源都加载完成后,这个页面就可以提供完整的外观和功能了

  

  前端的通信方式有以下几种:

  1. HTML的标签,在浏览器解析html标签的时候,遇到一些特殊的标签,会想服务器发送请求,包括link/img/script/iframe,chrome浏览器允许同一个域名下最多同时请求6个资源(可以把图片放在不同的域名下,加快加载速度)
  2. 一些标签不会主动向浏览器发送请求,但是用户可以使用它们发送请求,如a/form,需要手动触发
  3. 还可以使用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定义的几个主要的请求方法:

    1. GET:用于获取目标资源
    2. POST:用于创建新的资源
    3. PUT:用于更新现有的资源,需要提供完整的资源体
    4. PATCH:也用于更新现有的资源,但只需要提供要更改的资源
    5. DELETE:用于删除目标资源

    GET和POST的区别:

    1. 语义不同:GET用于获取数据,POST用于创建数据
    2. 发送数据方面:GET通过地址在请求头中携带数据,可携带的数据较少;POST可以通过请求头和请求体携带数据,可以携带的数据理论上是无限的,因此如果是大量数据可以使用POST请求
    3. 缓存:GET可以被缓存,POST不会被缓存
    4. 安全性:严格来说,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请求向接口提交数据)

  1. 提供前端要展示的数据
  2. 接受前端要提交的数据
  3. 存储数据,把数据存储到数据库中
  • 前后端交互

    相关名词:

url: 后端接口的地址, 即前端 Ajax 请求时的地址

method: 请求方法, 如GETPOSTPUTDELETE

状态码: 接口返回的状态, 如200302404500

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表示成功获取到数据

  • 一个前端页面可以对应不同的服务端

  

  • 服务端如何处理并返回数据
  1. 定义前端请求的 url 和相应的 method(前端ajax时需要url和方法)
  2. 用 Request 获取数据,用 Response 返回数据
  3. 读取和存储数据
  • 路由(router,服务器端的入口规则,需要前端和后端进行约定)

    路由包含:

    1. 定义 method ,如 GET/POST 等
    2. 定义 url 规则,如 / api / list 和 / api / create 等
    3. 定义输入(Request body)和输出(Response body)格式

    路由是规则,url 是路由的一部分,通过method 和 url 可以确定一个路由

  •  请求和响应

    通过 Request 可以获取 :method、url、body(请求体)

    通过 Response 可以获取:状态码、Content-type(返回数据类型)、body(响应体)

  • 服务端处理数据

    完整的流程:

     1.前端发送请求

     2.服务端获取 method 和 url ,确定使用哪个路由

     3.路由里面,执行相关的逻辑,如果需要操作数据库,路由会去操作数据库

     4.逻辑执行完毕,服务端会把相应的数据返回给前端