端开发:App 客户端 vs Web 网站 完整差异(含 HTTP 请求方法区分)
一、整体架构、会话、业务开发区别
1. Web 网站(浏览器访问)
- 载体:浏览器,无本地数据库,仅靠 localStorage 临时缓存,断网无法使用
- 会话机制:Cookie + Session,浏览器自动携带 Cookie,存在 CSRF 攻击风险
- 交互:早期页面渲染,前后端分离 SPA,存在浏览器同源跨域限制,自动发起 OPTIONS 预检请求
- 缓存:浏览器自动缓存 GET 接口,地址、参数存入历史记录、书签
- 消息推送:仅 WebSocket、浏览器通知,关闭页面收不到消息,无系统级推送
- 版本控制:无需客户端版本校验,后端更新浏览器刷新即生效
- 安全重点:XSS 过滤、CORS 跨域配置、CSRF 令牌校验
2. App(安卓 /iOS)
- 载体:原生 / Flutter 混合端,内置 SQLite 本地数据库,支持离线存储、离线操作同步
- 会话机制:Token/JWT 存客户端,请求头手动携带,搭配 RefreshToken 无感续登;支持多设备登录、挤下线
- 交互:纯 JSON API 交互,不存在浏览器跨域,无 OPTIONS 预检请求
- 缓存:后端提供增量同步接口,根据本地更新时间只返回新增数据,节省流量
- 消息推送:对接华为 / 小米 / APNs 厂商推送,APP 离线也能接收通知,后端需开发推送下发接口
- 版本控制:配套版本检测接口,支持强制更新、灰度分发、功能开关
- 安全重点:请求参数签名、时间戳防重放、设备指纹风控、接口请求体加密、Token 黑名单登出
- 额外配套接口:崩溃日志上报、埋点行为上报、分片断点续传、批量离线数据同步
二、HTTP 全部请求方法作用、使用规范(网站 & App 通用底层标准)
全部 9 种标准 HTTP 请求
-
GET 作用:只读查询数据,不修改服务器资源,天然幂等 参数放在 URL 地址栏,URL 长度有限制,不支持大文件;浏览器自动缓存、保存历史。 适用:查询列表、商品详情、个人信息、订单列表。
-
POST 作用:新增资源、提交业务操作、上传文件,非幂等,重复请求会重复生成数据 参数放请求 Body,支持 JSON、表单、二进制大文件,无长度限制。 适用:登录注册、创建订单、发布评论、上传图片。
-
PUT 作用:全量更新资源,需传入该资源完整字段,幂等。 适用:完整替换用户全部信息、完整修改商品全部参数。
-
PATCH 作用:局部更新资源,仅传入需要修改的字段,幂等。 适用:只改昵称、只修改手机号、单独修改商品价格。
-
DELETE 作用:删除资源,幂等,多次删除效果一致。 适用:删除购物车、删除订单、删除评论。
-
HEAD 类似 GET,但服务器只返回响应头,不返回数据体;用于检测链接是否有效、获取文件大小。
-
OPTIONS 浏览器跨域时自动发起的预检请求,询问后端允许的请求方式、跨域域名,业务无需手动调用。
-
TRACE 请求回环测试,存在安全风险,线上项目全部禁用,业务开发不用。
-
CONNECT 代理隧道转发,仅运维代理服务使用,后端业务开发接触不到。
REST 统一使用对照表
表格
| 业务需求 | 推荐请求方法 |
|---|---|
| 查询数据(列表 / 详情) | GET |
| 新增数据、提交表单 | POST |
| 完整替换整条数据 | PUT |
| 仅修改部分字段 | PATCH |
| 删除数据 | DELETE |
| 跨域预检 | OPTIONS |
| 预校验资源不获取内容 | HEAD |
三、网站与 App 在 GET/POST 等请求上的实操差异
相同底层规则
- HTTP 协议标准完全统一,GET/POST/PUT/DELETE 语义不分网页、App;
- 一套后端接口可同时提供给网页和 App 使用;
- 状态码、请求头、HTTPS 加密规则通用。
实际开发不同点
- GET 请求
- 网页:大量 URL 拼接参数,浏览器自动缓存、存历史;受 CORS 跨域限制;敏感参数会留在地址栏,有泄露风险。
- App:可使用 GET,但复杂筛选会改用 POST 传 JSON;无跨域预检;无浏览器缓存,全靠本地缓存;查询类敏感接口常加签名校验。
- POST 请求
- 网页:支持 form 表单、JSON 两种传参;Cookie 自动携带登录会话,需要 CSRF 校验。
- App:统一 JSON 请求体,几乎不用表单;Header 手动携带 Token、设备 ID、签名、版本号;后端统一校验签名、防重放、防重复提交。
- PUT/PATCH/DELETE
- 网页:老旧项目兼容差,很多只用 GET/POST 模拟修改删除。
- App:无浏览器兼容问题,严格遵循 REST 规范,正常使用 PUT/PATCH/DELETE。
四、完整业务示例对照(登录 + 查询商品)
1.Web 网站
登录 POST /web/login
表单参数拼接,浏览器自动携带 Cookie,后端校验 CSRF;服务端生成 Session 存入 Cookie,无需手动传头部。
查询商品 GET /web/goods/list?page=1
Cookie 自动携带登录凭证,浏览器缓存,无设备、版本、签名参数。
2.App 客户端
登录 POST /app/login
请求体 JSON 包含账号密码、设备 ID、版本号、时间戳、签名;后端先校验签名防篡改;返回 JWT Token + 刷新 Token。
查询商品 GET /app/goods/list?page=1&lastUpdateTime=178888888
请求头手动携带 Token、设备号、版本、签名;后端校验 Token、签名、判断 APP 版本是否过低;根据 lastUpdateTime 增量返回数据,返回多尺寸图片地址。
五、最常用 5 种
1. GET
作用:查询、读取资源,只读不修改数据
- 参数:放 URL 查询参数
- 幂等:多次请求效果完全一样,无副作用
- 限制:URL 长度有限,不能传大文件
- 使用场景: 查询列表、详情、首页数据、字典、个人信息 示例:
GET /goods/1查询 id=1 商品
2. POST
作用:新增资源、提交表单、执行操作、上传文件
- 参数:放在请求 Body
- 非幂等:重复调用会重复创建数据(重复下单、重复注册)
- 优势:支持大量数据、二进制文件、JSON
- 使用场景: 登录、注册、下单、发布评论、上传图片、提交表单 示例:
POST /order创建订单
3. PUT
作用:全量更新资源(完整覆盖修改)
- 语义:替换整个资源,必须传完整实体字段
- 幂等:多次提交同一套数据,结果不变
- 使用场景:完整修改用户信息、完整更新商品全部信息 示例:
PUT /user/1完整更新 id=1 用户所有信息
4. PATCH
作用:局部更新资源(只改部分字段)
- 和 PUT 区别:只传需要修改的字段,不用传全部
- 幂等
- 使用场景:修改昵称、单独改手机号、仅修改商品价格 示例:
PATCH /user/1只更新 nickname
5. DELETE
作用:删除资源
- 幂等:删一次和删多次结果一致
- 使用场景:删除订单、删除购物车、删除评论 示例:
DELETE /cart/10删除购物车 id=10 条目
六、REST 开发次要标准方法(项目偶尔用到)
6. HEAD
和 GET 几乎一模一样,但服务器只返回响应头,不返回响应体
- 用途:只检测接口是否正常、获取文件大小、判断资源是否存在,不拿数据
- 场景:下载前预校验文件、检测图片链接是否失效
7. OPTIONS
预检请求,浏览器跨域自动发起
- 作用:询问服务器允许哪些请求方法、允许跨域域名、请求头
- 开发场景:前端 SPA 跨域时浏览器自动发送,后端需要配置 CORS 响应
8. TRACE
回环测试,服务器原样返回请求内容
- 基本线上禁用,有安全风险,业务开发几乎不用
9. CONNECT
建立隧道代理,用于 HTTPS 代理转发
- 后端业务开发完全接触不到,运维 / 代理服务器使用