【一文了解】网络请求

目录

1.什么是网络请求?

2.按「请求方式/请求动词」分类

[1) GET请求:【查】获取数据](#1) GET请求:【查】获取数据)

[2) POST请求:【增/改】提交/上传数据](#2) POST请求:【增/改】提交/上传数据)

3)PUT请求:【改】修改/更新数据

[4) DELETE请求:【删】删除数据](#4) DELETE请求:【删】删除数据)

5)PATCH请求:【改】局部更新数据

6)HEAD请求:仅获取响应头

3.按「传输协议」分类

1)HTTP请求

2)HTTPS请求

4.其他常用分类

4.1.按「返回数据格式」分类

1)JSON请求/响应

2)XML请求/响应

4.2.按「请求目的/用途」分类

1)接口请求

2)资源下载请求

3)文件上传请求

4)长连接请求

4.3.按「请求特征」分类

1)同步请求

2)异步请求

5.网络请求的完整生命周期


本篇文章来分享一下网络请求,网络请求是开发中客户端(游戏/APP/网页)和服务端交互数据的核心方式,所有项目都会用到(如请求后端接口、加载网络图片、提交表单数据、下载资源都是网络请求)。

1.什么是网络请求?

客户端主动发起、向服务端/远程服务器要数据/ 发数据 / 要资源,服务端接收后返回对应结果的过程,就叫网络请求

● 核心本质:客户端与服务端的数据交互通道

● 举例:Unity里提交用户表单、加载远程配置表、获取排行榜数据、下载更新资源包、上传截图,都是网络请求;网页里登录账号、加载商品列表,也是网络请求。

2.按「请求方式/请求动词」分类

按「请求方式/ 请求动词」 分类网络请求, 是开发中最核心、最常写代码用到的分类,所有网络请求都基于这套标准(HTTP/HTTPS协议规范) ,请求动词决定了这次请求要做什么操作,所有后端接口、Unity 网络请求都会标注该请求的类型,一共6个核心类型。

1) GET请求:【查】获取数据

● 核心作用:向服务端查询/读取数据,只做读操作,不修改服务端任何数据

● 特点:参数直接拼接在请求URL后面(比如 https://xxx.com/api/getUser?id=1001)、请求数据量有限、速度快、安全性低(参数可见)

● 开发场景:Unity里加载排行榜、获取用户信息、加载配置表、读取公告内容、加载网络图片地址,90%的查数据需求都用 GET

2) POST请求:【增/改】提交/上传数据

● 核心作用:向服务端提交/上传/新增数据,也可用于修改数据,会改变服务端的数据/状态

● 特点:参数放在请求请求体中(不在URL显示)、支持提交海量数据、速度略慢于GET、安全性高(参数不可见)

● 开发场景:Unity里用户注册、登录提交账号密码、提交表单数据、上传用户头像、提交游戏战绩、创建订单,所有需要提交数据的需求必用POST

3)PUT请求:【改】修改/更新数据

● 核心作用:向服务端完整更新一条数据(全量修改),语义上是修改

● 特点:和POST类似,参数在请求体,有幂等性,即多次请求结果一致(比如修改用户昵称,请求1次和10次结果一样)

● 开发场景:Unity里修改用户昵称、修改个人资料、更新游戏角色信息、修改配置参数,适合「全量更新一条完整数据」

4) DELETE请求:【删】删除数据

● 核心作用:向服务端删除指定数据,语义上是删除

● 特点:参数可拼URL/放请求体,同样有幂等性,多次删除同一数据结果一致

● 开发场景:Unity里删除游戏内的收藏内容、删除用户的历史记录、删除订单,所有删除操作都用DELETE。

5)PATCH请求:【改】局部更新数据

● 核心作用:向服务端只更新一条数据的某一部分(局部修改),比如只改用户头像,不改昵称和手机号

● 特点:比PUT更灵活,传输数据量更小,开发中用的少,后端接口不一定会开放该类型

● 场景:精细的局部数据修改,Unity项目中一般用POST替代即可

6)HEAD请求:仅获取响应头

● 核心作用:只请求服务端返回「响应头信息」,不返回具体数据内容

● 场景:判断文件是否存在、获取文件大小/更新时间,Unity开发中几乎用不到

总结:牢记常用的4个,增 (POST)、删 (DELETE)、改 (PUT)、查 (GET)

3.按「传输协议」分类

按「传输协议」 分类网络请求, 决定请求的底层规则,开发必知所有网络请求都基于传输协议实现,协议决定了数据怎么传、传的是否安全、速度快慢,Unity开发中只用到如下2种核心协议。

1)HTTP请求

● 全称:超文本传输协议 (HyperText Transfer Protocol)

● 特点:明文传输,数据在网络中是裸奔的,容易被劫持、篡改,安全性低;传输速度快,请求简单

2)HTTPS请求

● 全称:超文本传输安全协议 (HyperText Transfer Protocol Secure)

● 特点:HTTP+SSL/TLS加密,数据传输前会加密,传输后解密,无法被劫持篡改,安全性极高;速度略慢于HTTP

4.其他常用分类

4.1.按「返回数据格式」分类

网络请求的本质是传数据,数据的格式决定了怎么解析,只有2种格式:

1)JSON请求/响应

● 格式:轻量级文本格式,比如{"code":200,"msg":"success","data":{"name":"test","id":1001}}

● 优点:体积小、解析快、跨平台、前后端通用,Unity中用JsonConvert/JsonUtility等可以轻松解析

● 场景:所有接口请求(登录、注册、排行榜、配置表),Unity开发的绝对主流,99%的Unity项目首选

2)XML请求/响应

● 格式:标签式文本格式,比如 <user><id>1001</id><name>test</name></user>

● 缺点:体积大、解析繁琐、效率低

● 场景:仅老项目兼容,Unity新项目完全不用

4.2.按「请求目的/用途」分类

在Unity里写的所有网络请求,都能归到这些场景里:

1)接口请求

请求后端API接口(GET/POST),比如登录、注册、获取数据、提交数据,最核心的网络请求。

2)资源下载请求

下载图片、音频、视频、预制体、更新包、配置表,比如加载远程头像、下载游戏资源。

3)文件上传请求

上传图片、视频、日志文件,比如上传用户截图、上传游戏报错日志。

4)长连接请求

实时通信(比如游戏内聊天、实时对战),用WebSocket协议,不是普通的HTTP请求。

4.3.按「请求特征」分类

1)同步请求

● 特点:发起请求后,程序会卡住等待服务端返回结果,直到拿到结果才继续执行后续代码;

● 缺点:Unity中严禁使用!会导致游戏卡死、界面无响应,哪怕等待1秒也会让玩家感知卡顿;

● 总结:Unity中永远不要写同步网络请求。

2)异步请求

● 特点:发起请求后,程序不会卡住,继续执行其他代码,服务端返回结果后,会通过回调/委托/协程通知,再处理结果;

● 优点:不阻塞主线程,游戏界面流畅,无卡顿;

● 总结:Unity中所有网络请求,必须用异步方式实现,没有例外!

5.网络请求的完整生命周期

不管是哪种请求、哪种协议,所有网络请求都遵循固定的生命周期,开发中遇到请求失败、无响应、数据错误,按这个流程排查,几乎能找到问题:

客户端准备 → TCP三次握手 →【HTTPS专属:TLS握手 】 → 发送请求 → 服务端处理 → 返回响应 → TCP四次挥手 → 客户端解析

常见问题排查:请求失败 = 连接失败;无响应 = 超时;数据错误 = 解析失败;返回码 404 = 接口地址错;返回码 500 = 服务端报错。

想要详细了解,可以参考【超详细】网络请求的完整生命周期

好了,本次的分享到这里就结束啦,希望对你有所帮助~

相关推荐
linux kernel5 小时前
第六部分:数据链路层
服务器·网络
chian-ocean13 小时前
深入 CANN:使用 `tbe-op` 构建自定义高性能算子
网络
中议视控13 小时前
可编程网络中央控制系统主机通过红外发射棒控制空调电视等红外设备
网络·物联网·5g
小李也疯狂15 小时前
Unity 中的立方体贴图(Cubemaps)
unity·游戏引擎·贴图·cubemap
牛掰是怎么形成的15 小时前
Unity材质贴图引用陷阱:包体暴涨真相
unity·材质·贴图
呆呆敲代码的小Y15 小时前
【Unity工具篇】| 超实用工具LuBan,快速上手使用
游戏·unity·游戏引擎·unity插件·luban·免费游戏·游戏配置表
数据安全科普王15 小时前
打破中心枷锁:P2P网络如何用“去中心化”重构互联网通信
网络·去中心化·p2p
EQ-雪梨蛋花汤15 小时前
【Unity优化】Unity多场景加载优化与资源释放完整指南:解决Additive加载卡顿、预热、卸载与内存释放问题
unity·游戏引擎
爱吃烤鸡翅的酸菜鱼15 小时前
CANN ops-nn激活函数与池化算子深度解析
网络·开源·aigc
我的offer在哪里15 小时前
用 Unity 从 0 做一个「可以玩的」游戏,需要哪些步骤和流程
游戏·unity·游戏引擎