跳转至

前后端的交互

前后端开发即使分离,其之间也应当具有协作,即前端服务器返回的 HTML 中嵌入的 JavaScript 如何以何种规范向后端服务器请求数据(前端如何向后端请求数据)。而这种规范是需要在开发时确定的,这种规范一般称为 API(全称 Application Programming Interface)规范。

本次小作业也是前后端分离开发的,所以也需要一份 API 规范,不过为了简化作业,我们已经为你提供了一份完整的 API 文档供参考。

HTTP 请求

一般而言,浏览器向服务器请求数据的时候都会使用 HTTP(超文本传输协议,全称 Hyper Text Transfer Protocol)协议。

一些基本的网络原理

网络协议从本质上而言就是规范计算机网络上数据传输格式等的一套共识。HTTP 是应用层网络协议,最初设计就是用于传输 HTML。其一般工作在 TCP 传输层协议上,然而 HTTP 并未规定其下层协议为何,事实上任何能提供可靠传输的下层协议理论上均可以支持 HTTP。

TCP(传输控制协议,全称 Transfer Control Protocol)协议是传输层协议,其是面向连接的,即意味着在实际的数据传输之前,需要先在数据发出方和接收方之间建立可靠的连接。相对于不面向可靠连接的 UDP(用户数据报协议,全称 User Datagram Protocol)而言,TCP 协议更为可靠,但也因此相对低效。

传输层协议下层常见的是网络层 IP(互联网协议,全称 Internet Protocol)协议,其常见版本为 IPv4 与 IPv6。在软件开发中可能会遇到 IP 地址,而 IP 地址就是为了标识和区分使用 IP 网络层协议的不同设备所分配的标志符。

而我们常用的类似 http://www.baidu.com 等链接称为 URL(统一资源定位符,全称 Uniform Resource Locator),也就是平时俗称的网址,其上定义了请求资源所要使用的协议(这里是 HTTP 协议),而 www.baidu.com 就是域名(Domain Name)。域名会通过 DNS(域名系统,全称 Domain Name System)解析为 IP 地址供数据交换。

再向下的链路层 MAC,以及 DNS 域名解析系统的细节工作等等已经远超出软件工程课程需要大家掌握的内容了。

HTTP 协议中规定了各种方法,如 GET、POST、PUT、DELETE 等,用于标识该请求的目的(如 GET 表示该请求用于获取数据)。

HTTP 请求一般包括请求行请求头请求体。请求行中规定使用的 HTTP 方法、请求路径和协议版本。请求头则是若干个键值对,一般会携带一些身份认证信息。请求体则包含实际的数据,如请求在数据库中创建新条目时携带新条目的信息。

HTTP 请求的应答则包含状态行应答头应答体。状态行除了协议版本外,还包含了 HTTP 状态码。应答头则也是若干个键值对,其对应答的数据做出基本的描述。应答体则是服务器应答的数据本体。

HTTP 状态码一般分为:

  • 信息响应 (100–199)
  • 成功响应 (200–299)
  • 重定向消息 (300–399)
  • 客户端错误响应 (400–499)
  • 服务端错误响应 (500–599)

更详细的说明可以见 这里这里

状态码用于提示服务器是否成功处理这一请求,并有时会提示发生错误的原因或者指示请求方应当作出的处理。最有名的状态码之一即 404 Not Found,其语义是服务器未能够找到请求的请求行中路径所指代的资源。

WebSocket

WebSocket 是工作在 TCP 传输层协议上的应用层协议,与 HTTP 不同的是,WebSocket 在实时通讯上优势显著,其优势主要在于高带宽利用率和高实时性。

由于 HTTP 是无状态协议(即不记忆任何事务处理信息,如果后续处理需要靠前的信息,则需要重传),其可能需要多次传输身份验证等信息。而 WebSocket 是有状态的,这使得其可以在通信时省略部分类似身份验证等信息,提高了网络带宽利用率。

另外,WebSocket 是全双工的(任何时候允许数据同时双向传递),这就允许客户端和服务器端建立 TCP 连接后,不仅客户端随时请求服务器端,服务器端也可以随时给客户端下发数据,这使得数据交换延迟极低,提高实时性。

本学期大作业中有实时通信项目,建议该项目采用 WebSocket 协议通信。

作者: Ashitemaru